远程主机强迫关闭了一个现有的连接。

l0v3_y1n9 2012-02-12 12:50:06

dwCount := 0;
bConnected := False;
Sock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if Sock = SOCKET_ERROR then Exit;
SockAddr.sin_family := AF_INET;
SockAddr.sin_addr.S_addr := inet_addr(PChar('192.168.1.110'));
SockAddr.sin_port := htons(7000);
bConnected := Connect(Sock, SockAddr, SizeOf(SockAddr)) <> SOCKET_ERROR;
if bConnected then
begin
while true do
begin
Inc(dwCount);
Send(Sock, dwCount的值, SizeOf(dwCount), 0);
recvLen := Recv(Sock, RecvBuf, SizeOf(RecvBuf), 0);
//程序执行大概15分钟后,这个recvLen变成-1,通过WSAGetLastError获得错误号是10054 也就是"远程主机强迫关闭了一个现有的连接。"
end;
CloseSocket(Sock);
end;


测试了十多次基本上都是有周期性的,每隔15分钟被远程主机关闭.排除网线和网络以及远程主机的服务端问题.
我现在的问题是,有什么方法能够避免远程主机服务端做这么猥琐的动作?一开始我以为发包太猛,我尝试过在循环里面加入sleep(100); 也一样会周期性出错.
如果没办法控制这个错误的出现,出现错误后我如何继续循环发送dwCount之前累加的值,Sock出错后是不是需要重新创建套接字?如果把Connect上面那大段代码搬过来实在觉得不太美观~ 有什么更好点的方法?
初接触winsock 望指教
...全文
151 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻_风 2012-02-12
  • 打赏
  • 举报
回复
recvLen变成-1之后,添加重连、重发数据的处理, 或者是另起线程维护这个连接, 不过觉得这里做断开重连的处理就可以了。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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