问题如下:
一个利用winsock控件数组的服务器与客户端通讯,现在出现一个问题就是服务器突然死机或拔掉电源了再重启,注意不是按电源按钮重启,软件重新进入后就不能与客户端通讯了。
我分析原因如下,因为服务器死机或拔掉电源,服务器端软件不是正常退出,软件重启后,客户端的winsock的连接状态还是连接的,所以不会再向服务器发连请求
我在软件正常退出是这样做的:
Server(Index).Close ‘Server为Winsock控件数组。
Unload Server(Index)
客户端用一个定时器检查连接:
Private Sub checkNet_Timer()
On Error Resume Next
If Winsock.State <> 7 Then
Winsock.close
Winsock.Connect
End If
客户端在服务器端没有发关闭连接过来, winsock的状态就是保持连接的,造成无法与服务器连接。winsock控件为什么自动在与服务器不能连接后更新其状态。请问高手,有什么解办法?
一个利用winsock控件数组的服务器与客户端通讯,现在出现一个问题就是服务器突然死机或拔掉电源了再重启,注意不是按电源按钮重启,软件重新进入后就不能与客户端通讯了。
我分析原因如下,因为服务器死机或拔掉电源,服务器端软件不是正常退出,软件重启后,客户端的winsock的连接状态还是连接的,所以不会再向服务器发连请求
我在软件正常退出是这样做的:
Server(Index).Close ‘Server为Winsock控件数组。
Unload Server(Index)
客户端用一个定时器检查连接:
Private Sub checkNet_Timer()
On Error Resume Next
If Winsock.State <> 7 Then
Winsock.close
Winsock.Connect
End If
客户端在服务器端没有发关闭连接过来, winsock的状态就是保持连接的,造成无法与服务器连接。winsock控件为什么自动在与服务器不能连接后更新其状态。请问高手,有什么解办法?
去掉 on error resume next
发现错误,客户端自动从连
//去掉 on error resume next
//发现错误,客户端自动从连
如果只去掉on error resume next 还是一样吧,因为winsock状态还是连接的,不会重连。
如果去掉 If Winsock.State <> 7 Then
那变成时刻发送连接请求。服务端时时要处理接受,并且连接下标变化,对服务器操作有影响。
//就像QQ断线后都会定时重新连接
//你说600个客户端重新更新那有什么问题?
1、客户端重连问题在于客户端的状态是连接的。
//你说600个客户端重新更新那有什么问题?
2、以前使用正常,最近服务器电脑经常死机才发现这个BUG,如果修改客户端程序,有600多台电脑要更新,要是在服务器端修改一下就好了。
因为是互联网 客户端不连接你,你怎么知道他在哪
tcp 连接是一个有连接的连接 如果一方断了必须从新连接才能通讯 你总不至于叫服务器连接客户端,那也不可能 客户端的控件是连接状态,根本没有监听的,没法建立连接
On Error Resume Next
Winsock.SendData "TestOnline" ’是在这加一句后,如果有错误,winsock会更新自已的状态吗??
If Winsock.State <> 7 Then
Winsock.close
Winsock.Connect
End If还是这样做:
Private Sub checkNet_Timer()
On Error Goto Err
Winsock.SendData "TestOnline"
Exit Sub
Err:
Winsock.close
Winsock.Connect
Exit Sub
服务器端要做接受的吗?
这样做会不会有时候不一定是没有连接出现错误,而造成重连
只要是错误,你客户端就有问题,你判断是winsock的错误就行乐,具体查msdn
On Error Resume Next
Winsock.SendData "TestOnline" ’是在这加一句后,如果有错误,winsock会更新自已的状态吗??
If Winsock.State <> 7 Then
Winsock.close
Winsock.Connect
End If
这样解决最好。
原来的其实只要客户有相关数据发送操作就重连了