解决方案 »
- 【求助】如何通过NtDeviceIoControlFile获得IP地址、端口信息
- 数据库密码
- 请问XP下如何架构IIS服务?
- 如何在CListCtrl控件的标题栏里自绘图形?如绘一个小三角。
- 请问如何能使用BCB和VC共同开发
- 如何得到一个窗口的指针或一个类的指针
- 在vc中通过ado连接oracle数据库
- 请教:我select count(*)和delete 一个空表,该表有200个自段,但是空的,数据非常的慢,很奇怪,有可能是什么原因呢???
- 请教SQL 2000订阅和复制问题(拿了全部的份啦)。。。。。。。。。。。
- 怎样将CRecordset与一个CDatabase相联系
- 【软件报Unhandled exception错误】前辈们帮忙看看吧!
- LNK2001错误 很费解 开始还能编译通过,过了一两个小时再编译时就出现了以下错误 请各位帮忙解决下 谢谢。
1、lz用的Socket的什么模型?
2、帖你的客户端的代码看看
DWORD WorkThread( LPVOID param ){ //连接服务器
if(ConnectThread(server_ip_addr)){
//进入接收循环
while(1){
//RecvFromSocket();//实际上没有接收
Sleep(200);
}//
}else{
printf("建立连接失败!");
}// return 1;
}
//服务器
while(1){
............//选64个套接口加入发送集合fdsend
status=select(0,NULL,&fdsend,NULL,&tv);
if( status==SOCKET_ERROR ){
printf("select ERROR:%d",WSAGetLastError());
Sleep(2000);
}else if(status==0){
printf("未收到发送应求!\n");
//超时处理
}else{
for(unsigned int i=0;i<64;i++){
cur_socket = g_p_socket_list[i_socket_index_list[i]];
assert( cur_socket!=NULL );
//检查套接口是否在发送集合中
if(cur_socket!=NULL && FD_ISSET(cur_socket, &fdsend)){
.......
send();//调用send()
}
}
Sleep(3000);
}
我怀疑是不是由于客户端没有接收服务器发送的包,发送的数据包在路由器的缓冲中赌起了造成了网路瘫痪
//
// 连接服务端
//
//-----------------------------------------------------------------------------
DWORD ConnectThread( const char* p_char_ip ){ int iPort=DEFAULT_PORT;
WSADATA wsaData;
sockaddr_in ser;
bool is_need_connect=false;
int i_try_count=0;//尝试计数 //提示信息
printf(
"-----------------------------------\n\
初始化客户端\n\
-----------------------------------\n"
);
//加载Winsock DLL
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0){
printf("加载 Winsock失败!");
WSACleanup();
return 0;
}
printf(
"-----------------------------------\n\
初始化客户端完成\n\
-----------------------------------\n"
); //绑定客户端套接字,指定套接字的,IP地址与端口号
//进入一个有限循环,建立与服务端的连接
for( int i=0; i<g_client_config.m_i_max_count_of_user; i++){
//初始化需要绑定的数据
ser.sin_family = AF_INET;
ser.sin_port = htons( iPort);
ser.sin_addr.s_addr = inet_addr(p_char_ip); //创建客户端套接字
g_p_socket_list[i]=NULL;
g_p_socket_list[i]=socket( AF_INET, SOCK_STREAM, 0 );
if( g_p_socket_list[i] == INVALID_SOCKET ){
printf("创建套接字失败!%d\n",WSAGetLastError());
return 0;
}else{
printf("编号%d 套接口创建成功!\n",i);
int optname=0;
int optlen=0;
int reset_op = 64*1024;
optlen=sizeof(optname);
//重新设置接收缓冲为64K
if(setsockopt(g_p_socket_list[i], SOL_SOCKET, SO_RCVBUF, (char*)&reset_op,sizeof(reset_op))
==SOCKET_ERROR){
printf("getsockopt() Error:%u\n",WSAGetLastError());
return 0;
}// }// //连接服务器
is_need_connect=true;
while(is_need_connect){
if(connect(g_p_socket_list[i],(sockaddr*)&ser,sizeof(ser))==INVALID_SOCKET){
int i_last_error = WSAGetLastError();
printf("连接服务器 失败:%d\n",i_last_error);
switch( i_last_error ){
case 10051://未能到达服务端
printf("编号: %d 未能到达服务端,再次尝试! \n尝试次数 %d\n",i,i_try_count);
Sleep(1000);
is_need_connect=i_try_count++<20;
break; case 10060: //连接超时
case 10061: //服务器繁忙
printf("服务器繁忙,再次尝试! 编号: %d\n尝试次数 %d\n",i,i_try_count);
Sleep(1000);
is_need_connect=i_try_count++<20;
break;
default:
printf("未找到错误原因,默认处理关闭套接字!: %d\n",i);
is_need_connect=false;
closesocket(g_p_socket_list[i]);
g_p_socket_list[i]=NULL;
}//
}else{
i_try_count=0;
printf("编号%d 连接服务器成功!\n",g_i_fact_connect_count++);
is_need_connect=false;
}// //尝试的次数太多了
if(i_try_count>=20){
return 0; //连接失败
}// }//end whilewhile(is_need_connect) }//end for
return 1;}//