首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-12-31 
远程主机强迫关闭了一个现有的连接。本帖最后由 l0v3_y1n9 于 2012-02-12 01:03:50 编辑dwCount : 0bConn

远程主机强迫关闭了一个现有的连接。
本帖最后由 l0v3_y1n9 于 2012-02-12 01:03:50 编辑


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 望指教 
[解决办法]
recvLen变成-1之后,添加重连、重发数据的处理, 或者是另起线程维护这个连接, 不过觉得这里做断开重连的处理就可以了。

热点排行