winsocket多个客户端连接的问题

chuting1 2011-08-04 11:09:16
服务器端开放一个端口1399,启动时默认为侦听状态

If sockServer.State <> sckClosed Then
sockServer.Close
End If


sockServer.LocalPort = "1399"
sockServer.Listen

服务器连接请求处理:
Dim msgResult As VbMsgBoxResult
If sockServer.State = sckListening Then
sockServer.Close
End If

lstStateInfo.AddItem "服务器收到连接请求"
sockServer.Accept requestID
lstStateInfo.AddItem "连接成功"


客户端连接

sockClient.Protocol = sckTCPProtocol

If txtServerName.Text <> Empty Then
sockClient.RemoteHost = txtServerName.Text
Else
lstStateInfo.AddItem "必须输入服务器名称或IP地址"
Exit Sub
End If

If txtServerPort.Text <> Empty Then
sockClient.RemotePort = txtServerPort.Text
Else
lstStateInfo.AddItem "必须输入远程端口"
Exit Sub
End If

sockClient.Connect



客户端数据发送

sockClient.SendData txtSend.Text



一个客户端没有关系,第二个客户端打开连接时,就会返回“连接被强制拒绝”
如果不使用connect,直接数据发送,则会提示"所需事物或请求的错误协议或连接状态"

是什么原因,请指点
...全文
184 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaboyzyq 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 MSDN]
接受多个连接请求
上面设计的基本服务器只能接受一个连接请求。通过创建控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后在新的实例上调用 Accept 方法。

下面的代码假定名为 sckServer 的窗体上有一个 Winsock 控件,它的 Index 属性被设置为 0;因此控件是控件数组的一部分。在声明部分,声明了一个模块级的变量 intMax。在窗体的 Load 事件中,intMax 被设置为 0,数组中第一个控件的 LocalPort 属性被设置为 1001。然后调用控件的 Listen 方法,使之成为“监听”控件。在连接请求到达时,代码将检测 Index 是否为 0(“监听”控件的值)。如果为 0,监听控件将增加 intMax 的值,并使用该号码来创建新的控件实例。然后,使用新的控件实例接受连接请求。

Private intMax As Long

Private Sub Form_Load()
intMax = 0
sckServer(0).LocalPort = 1001
sckServer(0).Listen
End Sub

Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 0
sckServer(intMax).Accept requestID
Load txtData(intMax)
End If
End Sub


[/Quote]
sqtadk 2011-08-04
  • 打赏
  • 举报
回复
问题出在这里:
If sockServer.State = sckListening Then
sockServer.Close
End If

你把这段去掉就没问题了
wildone 2011-08-04
  • 打赏
  • 举报
回复
是winsock只能进行一组连接吧?
chuting1 2011-08-04
  • 打赏
  • 举报
回复
是不是一个服务器器一个端口只能和一个客户端连接?

在服务器连接请求里加了
If sockServer.State = sckAlreadyConnected Then
sockServer.Accept requestID
lstStateInfo.AddItem "连接成功"
End If
还是不行
chuting1 2011-08-04
  • 打赏
  • 举报
回复
谢谢,楼上正解

7,785

社区成员

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

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