|
发表于 2011-10-24 13:56:51
|
显示全部楼层
回复【楼主位】ffxz
-----------------------------------------------------------------------
ffxz:
您好!
我现在做了一项目,主要是通过ucos+lwip+dm900来做一套网络控制模块:一个模块做服务器,多个模块做客户端。
遇到的问题是:客户端开机后会去连服务器,但若是服务器未开机等原因而没连上,则客户端就会循环着执行连接函数,直到连上为止。问题出现在:当客户端循环执行连接函数几百次后,对连接函数的执行时间会拉长,这时再打开服务器已经连接不上了!请问这是什么原因啊?该怎样解决啊?
我现在在修改:
lwip_connect(hSocket,(struct sockaddr *)(&server_addr),sizeof(struct ockaddr))
函数,您看思路对吗?若对,该怎样修改啊?
其中,循环执行连接函数,直到连接上为止的程序段如下:
while(1)//先连接到服务器,成功后就开始通信
{
hSocket = lwip_socket(AF_INET,SOCK_STREAM,0); //>0 创建Socket //AF_INET:IPv4; SOCK_STREAM:TCP //在socket.c中有定义//返回值是整形
if(hSocket == -1) //error
{
lwip_close(hSocket); //断开连接
continue;
}
lwip_setsockopt(hSocket,SOL_SOCKET,SO_REUSEADDR,&intOptlen,sizeof(int));//如果服务器 终止后,服务器可以第二次快速启动而不用等待一段时间
lwip_setsockopt(hSocket,SOL_SOCKET,SO_REUSEPORT,&intOptlen,sizeof(int));//否则,服务器关闭再启动后可能就连不上了
//lwip_setsockopt(hSocket,SOL_SOCKET,SO_DONTLINGER, ( const char* )&bDontLinger, sizeof( char ) );
if(lwip_connect(hSocket,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)) == -1) //这里判断是否连接上
{
lwip_close(hSocket); //断开连接
continue;
}
else
{
ClientCommunicationT(hSocket); //和服务器通信,入口参数是socket描述符
//break;
}
}
非常感谢您! |
|