关于socket连接的生命期的问题?

xqchang 2003-05-13 05:50:00
不知道大家有没有碰到这样的问题:即socket(TCP)建立连接以后,经过若干的recv()和send()后,有时连接就会自己中断了,很不稳定,不知道大家是怎么处理这个问题的?难道在每次recv和send时都要检测连接状况吗?
...全文
77 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqchang 2003-05-16
  • 打赏
  • 举报
回复
找出问题了,很奇怪,谁能给我讲讲道理?
我原来的程序是这样:
客户端:
for(;;)
{
..........
send(...);
..........
}
服务端:
for(;;)
{
..........
recv(...);
..........
}
即客户在for循环中只是发送数据,服务端只接收数据。在种情况下,若服务端与客户端在同一机器上,还可以运行,若在局域网内不同的机器上,则服务端的recv()经常返回0,即接收超时错。我将程序作了如下修改就可以了:
客户端:
for(;;)
{
..........
send(...);
int a;
recv(s,&a,sizeof(int),0);
..........
}
服务端:
for(;;)
{
..........
recv(...);
int a=0xFFFF;
send(s,&a,sizeof(int),0);
..........
}
什么原因,谁给讲讲道理?谢谢!
Sander 2003-05-16
  • 打赏
  • 举报
回复
用事件驱动比较好,你这个sleep(1)不是一个好的办法
Crob 2003-05-16
  • 打赏
  • 举报
回复
这有什么原因,第一个for的做法不同步,其中当然有进会recv到0,这不一定是超时的错误。

Sander 2003-05-16
  • 打赏
  • 举报
回复
xqchang 2003-05-15
  • 打赏
  • 举报
回复
我在每个send()和recv()后面都加了一句Sleep(1),就好多了,看来还是通信同步的问题,这样处理好吗?
lovemaggic 2003-05-14
  • 打赏
  • 举报
回复
如果网路比较好的话,socket的连接断开在1秒中内可以达到几十次,甚至上百次,
所以你完全没有必要去担心处理连接所用的时间.应该花更多的时间在代码的优化和思路.
xqchang 2003-05-14
  • 打赏
  • 举报
回复
我给recv()和send()设的超时时间是60秒,在一个for循环里连续进行recv()和send(),但经常在经过若干次成功的调用后就会返回SOCKET_ERROR(特别是在recv()后),现在我不得不在每次调用recv()后,都要判断返回值,若为SOCKET_ERROR就断开连接重新建立连接,但这样程序就变得比较乱。尤其在传输大文件时,当传到一半时,其中的一个recv()返回了SOCKET_ERROR,就不得不重新传(即使是续传也需要重新建立连接),实在是郁闷!
我的客户端与服务端程序都在同一机器上运行,网络状况应该没有比这更好的了吧?:)

chen_jun_fen(bitwise)的办法也许是一种解决问题的办法,但若是服务端这边出的错,由服务端来重新建立连接的话,会有一点迟延(accept需要时间)。
用select可以得到socket的状况,但若其中的一个recv()没有成功的话,还是需要处理连接的问题。

我想知道的是这种情况到底是不是正常的?若是正常的,我就没什么话说了,程序的可靠性也就不敢说了。若不正常,应该注意些什么问题呢?
tserpent 2003-05-14
  • 打赏
  • 举报
回复
应该不会的。如果你没设置这个socket的话,默认是不检测tcp连接的,即使你要求检测,默认的时间也应该是7200秒,除非你或者对方连接修改这个值。tcp发送数据要求握手过程,会不会跟你的网络情况相关。
BlueSky2008 2003-05-14
  • 打赏
  • 举报
回复
用select 判断
lovemaggic 2003-05-14
  • 打赏
  • 举报
回复
操作系统默认tcp连接的检测时间是2个小时,可以通过注册表修改
chen_jun_fen(bitwise)的方法很好,可以借鉴
chen_jun_fen 2003-05-14
  • 打赏
  • 举报
回复
假如你不太相信长连接,
你可以使用断连接的方法,
就是每次在发送数据前,都和对方建立一个连接,
发完数据后断开
lichungen 2003-05-13
  • 打赏
  • 举报
回复
根据RECV与SEND的返回值进行连接状况判断

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧