社区
网络编程
帖子详情
关于socket连接的生命期的问题?
xqchang
2003-05-13 05:50:00
不知道大家有没有碰到这样的问题:即socket(TCP)建立连接以后,经过若干的recv()和send()后,有时连接就会自己中断了,很不稳定,不知道大家是怎么处理这个问题的?难道在每次recv和send时都要检测连接状况吗?
...全文
77
12
打赏
收藏
关于socket连接的生命期的问题?
不知道大家有没有碰到这样的问题:即socket(TCP)建立连接以后,经过若干的recv()和send()后,有时连接就会自己中断了,很不稳定,不知道大家是怎么处理这个问题的?难道在每次recv和send时都要检测连接状况吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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的返回值进行连接状况判断
从
问题
看本质:
socket
到底是什么?
一、
问题
的引入——
socket
的引入是为了解决不同计算机间进程间通信的
问题
1.
socket
与进程的关系 1).
socket
与进程间的关系:
socket
用来让一个进程和其他的进程互通信息(IPC),而
Socket
接口是TCP/IP网络的API...
socket
从
问题
看本质:
socket
到底是什么 一、
问题
的引入——
socket
的引入是为了解决不同计算机间进程间通信的
问题
1.
socket
与进程的关系 1).
socket
与进程间的关系:
socket
用来让一个进程和其他的进程互通信息(IPC),而
Socket
...
Linux 中每个 TCP
连接
最少占用多少内存?
关于“Linux 中每个 TCP
连接
占用多少内存”这一
问题
,中文网络上流传一种说法:TCP
连接
建立的时候会分配接收缓冲区和发送缓冲区,各 4KB,一共是 8KB。如果加上 TCP 协议控制块(protocol control block)的 2KB,...
从
问题
看本质:
socket
到底是什么?及
socket
,端口,进程问答(收集整理)
一、
问题
的引入——
socket
的引入是为了解决不同计算机间进程间通信的
问题
1.
socket
与进程的关系 1).
socket
与进程间的关系:
socket
用来让一个进程和其他的进程互通信息(IPC),而
Socket
接口是TCP/IP网络的API...
linux 关闭
socket
shutdown,关于
socket
的关闭:close和shutdown
声明:该博文以
socket
中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(my
Socket
.getOutputStream()));中的dout做为
Socket
输出流的代言.同样...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章