使用SOCKET, 为什么客户端退出再启动时, 服务端还有原连接?(300分)

  • 主题发起人 主题发起人 lxm365
  • 开始时间 开始时间
L

lxm365

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用SOCKET编写了一个数据采集系统, 服务端只向第一个连接发送数据, 向其它连接
发送第一个连接的地址. 由于维护等原因中断网络, 因此关闭客户端再重新启动. 出现
一个问题:客户端可以与服务端连接, 但不能收到数据,只收到客户端主机地址信息.
请问:
(1)为什么会这样?
(2)不想出差到外地把服务端关闭重启,有什么方法就在本地让服务端关闭以前的连接.
(3)如何修改服务端程序?
 
我建议你在服务端增加一个进程,与你现在的进程形成互相监控关系,即:通过周期性
的查询,看进程是否在运行,不运行就启动对方。

(以上方法为多数双机群集系统采用,参考http:/www.roseha.com)

如果你需要让服务器关闭以前的连接,你留一个命令,通过发送此命令让服务器执行此操
作。
 
(1)因为你失去了第一次的连接,而由于服务器端在连接你的第一个连接后一直处于监听状态,
对你的第二次连接作为其他的连接处理,所以你会收到你的主机地址信息。而不能接受数据。
(2)先用shutdown函数通知发送端不在发送数据,再用closesocket函数关闭这个连接。
(3)不明白你的意思。
 
在ServerSocket中设置超时时间即可自动断开连接。
 
SERVER如果不给客户端发送消息他不知道客户端已经掉了
所以你可以定时给每个客户端发个没用消息(客户端也不处理)就可以知道
他掉了
 
Socket的监听端一般不会自动断开与客户端的联接。
只有定期与客户端通讯,才能够判断客户端是否已中断,或死锁。
M$的DCOM对客户的联接有效性判断也是通过定期通讯来做的。
 
我也有同样的问题,关注~!
 
后退
顶部