Private Sub UserListen_ConnectionRequest(ByVal requestID As Long)
'寻找空闲的usersock
Dim Index As Long
Dim ii As Long
For Index = 0 To MaxDSClient
If Index = MaxUserClient Then updata_data = Format(Now, "yy-mm-ss hh:mm:ss") & "→服务器:服务器分配用户的连接已经分配完毕,将不会接受新的用户连接。": updata_serverList
If Me.UserClient(MaxUserClient).State <> 0 Then updata_data = Format(Now, "yy-mm-ss hh:mm:ss") & "服务器:用户连接超过最大连接数,如果需要创建更多连接请修改系统设置,然后重启服务器。": updata_serverList: Exit Sub
If UserClient(Index).State = 0 Then
UserClient(Index).Accept requestID
UserClient(Index).Tag = Format(Now, "yyyymmddhhmmss")
For usersock_state = 0 To MaxUserClient
If UserClient(usersock_state).State <> 0 Then
If UserClient(usersock_state).RemoteHostIP = UserClient(Index).RemoteHostIP And UserClient(usersock_state).Tag < UserClient(Index).Tag Then
UserClient(usersock_state).Close
updata_data = Format(Now, "yy-mm-ss hh:mm:ss") & "→服务器:存在两个连接IP相同的用户,服务器将关闭早期的连接" & "|" & UserClient(Index).RemoteHostIP
updata_serverList
End If
End If
Next
Exit For
End If
Next
'DoEvents
End Sub
以上为服务器监听代码!我现在碰到原因是在内部光纤的情况下!超过80个TCP客户端同时连接服务器监听端口时软件服务器会出现卡死的状态。请问下是监听端口连接的卡死还是接收客户端信息口的卡机?tcp服务器
'寻找空闲的usersock
Dim Index As Long
Dim ii As Long
For Index = 0 To MaxDSClient
If Index = MaxUserClient Then updata_data = Format(Now, "yy-mm-ss hh:mm:ss") & "→服务器:服务器分配用户的连接已经分配完毕,将不会接受新的用户连接。": updata_serverList
If Me.UserClient(MaxUserClient).State <> 0 Then updata_data = Format(Now, "yy-mm-ss hh:mm:ss") & "服务器:用户连接超过最大连接数,如果需要创建更多连接请修改系统设置,然后重启服务器。": updata_serverList: Exit Sub
If UserClient(Index).State = 0 Then
UserClient(Index).Accept requestID
UserClient(Index).Tag = Format(Now, "yyyymmddhhmmss")
For usersock_state = 0 To MaxUserClient
If UserClient(usersock_state).State <> 0 Then
If UserClient(usersock_state).RemoteHostIP = UserClient(Index).RemoteHostIP And UserClient(usersock_state).Tag < UserClient(Index).Tag Then
UserClient(usersock_state).Close
updata_data = Format(Now, "yy-mm-ss hh:mm:ss") & "→服务器:存在两个连接IP相同的用户,服务器将关闭早期的连接" & "|" & UserClient(Index).RemoteHostIP
updata_serverList
End If
End If
Next
Exit For
End If
Next
'DoEvents
End Sub
以上为服务器监听代码!我现在碰到原因是在内部光纤的情况下!超过80个TCP客户端同时连接服务器监听端口时软件服务器会出现卡死的状态。请问下是监听端口连接的卡死还是接收客户端信息口的卡机?tcp服务器
这儿怎么不退出呢: exit sub
如果要开发这种网络服务程序,建议换成 C/C++ 采用多线程或 IOCP 的方案来实现,VB+WinSock控件这个架构本来问题就很多,当玩具还可以,要抗压,根本不可能,你程序写得再好都是没用的,这一块是VB的软肋。
换方案,可以用 IIS+ASP+XMLHTTP+VB 来实现这种网络数据的传输,因为服务程序借助的是现成的专业服务程序,通过服务器脚本识别远程请求来上传下载数据,稳定性和性能等需求都有一定的保障,而客户端直接用现成的系统对象来访问,简化了操作,同时也提高了开发效率。
如果换开发工具,意味着你要有一定的网络开发方面基础,并且有能满足专业需求并可行的架构方案,如IOCP、过滤驱动、NT服务、程序配置等相关技术以及架构方案和现成模块等,如果没有这些东西,开发起来工程量会很大,而且稳定性、抗压能力、资源管控等都未必能得到改善,毕竟要搞个专业的网络服务程序不是个简单的事情,用VB来弄太儿戏了,说这种弄法是玩具级别的都高抬他了。
1、采用我上面说的IIS+ASP+XMLHTTP+VB的方案,有点类似于WEB开发上的AJAX技术来实现这种网络数据交换操作。
2、项目外包,找个有实力的人或公司去弄网络服务这一块,你们自己写客户端。
如果你不急于解决这种问题,你可以慢慢去研究C/C++语言网络服务程序开发这一块,熟悉了基础知识后,去研究架构,然后再开始慢慢实验和慢慢写。
如果你留意一下会发现,在设备管理器里被影藏的项目中,会发现HTTP服务是做了驱动支持的,这就是MS的解决方案,而MS对外的解决方案是IOCP,虽然也不错,不过还是有软肋的,在这一块的架构上,要弄得好,自己还是要去弄过滤驱动的,虽然这种驱动并不难做,但对于搞应用开发的人来说,开始还是很花时间的,所以这一块真要深入,水可以说还是很深的,不会像VB做玩具那么简单,要自己做这块没有个心里准备是不行的。