多个socket的问题

qinguangjun123 2010-12-11 01:37:29
我用一个socket监听,然后用其他的socket和监听到的连接通讯,当一个客户端时通讯没有问题,当有两个以上时,通讯也能实现,但是会经常出现10053 Connection is aborted due to timeout or other failure的错误,然后错误的那个连接重新连接,
Private Sub WinServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
dim strFenID as string
strFenID =WinServer(0).RemoteHostIP
For i = 1 To UBound(g_WinSocketArray)
If g_WinSocketArray(i).ip= strFenID Then
With g_WinSocketArray(i)
.strConnectTime = Format(Now, "yyyy-MM-dd hh:mm:ss")
WinServer(.WinSocketIndex).Accept requestID
End With
Exit For
End If
Next i
End Sub
希望大家给提点建议,我感觉上面的代码应该没有问题,因为上面的问题只是偶尔出现,不知道问题应该出在了什么地方,望指点。
...全文
175 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinguangjun123 2010-12-13
  • 打赏
  • 举报
回复
我和两个以上的客户端通讯没有问题,我感觉我的接受方式应该没有问题,只是下面的客户端会无缘无故的重新连接,错误10053,双方都没有关掉连接。不知道该如何处理。
iamthesame 2010-12-13
  • 打赏
  • 举报
回复
学习学习,我还是菜鸟

高手多指点
jiashie 2010-12-13
  • 打赏
  • 举报
回复
srv(0)只监听,当有request时,用空闲的srv(n) n>=1 接受连接,只需要把requestID传过去就行了 (srv(n).accept requestID )

srv(0)只负责监听客户端的连接请求。
of123 2010-12-13
  • 打赏
  • 举报
回复

定时发消息到客户端。n 次无回应就认为断开了。
king06 2010-12-11
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20101208/16/241d7424-ccc4-4c01-83d6-8359a111e8b5.html
蓝海 2010-12-11
  • 打赏
  • 举报
回复
您应该考虑:以下 SRV0 代表您的 WinServer(0),SRV0 做为首次连接的监听者;
SRVx 表示您新创建的 WinServer(x) 服务对象或原有的空闲的服务对象;

当 SRV0 做为首次连接的临听者,并且接收到某个客户端的连接请求时:
A、判断自身是否与其他客户端的通讯结束;
B、如果空闲,可以接受连接请求;否则客户端会等待;
C、连接成功后,检查有无空闲的 SRVx(大于1)的空闲的服务;如果有,您要让空闲的 SRVx 做为新的客户端服务来监听客户端的连接请求;这时,您还要为 SRVx 指定或自动分配新的监听端口号,并且此时 SRV0 还要通知当前的新的客户端,它下次与 SRVx 进行持久连接的端口号是多少?
D、做到这一步,您的 SRV0 就可以与当前的客户端断开连接了,并且重新监听下一个首次连接请求;
E、SRVx 与客户端建立持久连接后,就剩下通讯了,您还得构造简单的通讯协议了;当然了,SRV0也需要简单的通讯协议,都需要您自己去构造;
蓝海 2010-12-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 qinguangjun123 的回复:]
我用一个socket监听,然后用其他的socket和监听到的连接通讯,当一个客户端时通讯没有问题,当有两个以上时,通讯也能实现,但是会经常出现10053 Connection is aborted due to timeout or other failure的错误,然后错误的那个连接重新连接,
Private Sub WinServer_ConnectionRequest(Index As I……
[/Quote]

你这个代码有问题,肯定多个客户端要连接时会有问题了!

WinServer(0) 做为首次连接的监听者,那么它接收到连接请求后应该做什么,和 WinServer(大于1)的那些肯定是不一样的!您最好把 WinServer(0) 改名然后各做各的事件处理过程!

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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