winsock连接3台电脑,1个是服务器,2个客户端,为什么只能建立一个连接?

ykb 2005-05-16 05:21:09
一个客户端连接没问题,再连接一个客户端就报这个错:“所需事物或请求的错误协议或连接状态”,是客户端报错


服务器端的代码
==================================================================================
Private Sub Form_Load()
Winsockserver.Listen

End Sub


Private Sub textsend_Change()
Winsockserver.SendData textsend.Text
End Sub

Private Sub Winsockserver_Close()
Winsockserver.Close
End Sub

Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)
textsend.Visible = True
textget.Visible = True
If Winsockserver.State <> sckClosed Then Winsockserver.Close
Winsockserver.Accept requestID
End Sub

Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)
Dim tmpstr As String
Winsockserver.GetData tmpstr
textget.Text = tmpstr
End Sub


客户端的代码
======================================================================
Private Sub Command1_Click()
Winsockclient.Connect
End Sub

Private Sub Text1_Change()
Winsockclient.RemoteHost = Text1.Text
End Sub

Private Sub Textsend_Change()
Winsockclient.SendData Textsend.Text
End Sub

Private Sub Winsockclient_Close()
Winsockclient.Close
End Sub

Private Sub Winsockclient_DataArrival(ByVal bytesTotal As Long)
Dim tmpstr As String

Winsockclient.GetData tmpstr

Textget.Text = tmpstr

End Sub

...全文
77 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ykb 2005-05-17
  • 打赏
  • 举报
回复
有一点不明白
为什么要加这句 Winsock1(temp).LocalPort = 0 ?
为什么是0 而不是 7699 ?
zyg0 2005-05-17
  • 打赏
  • 举报
回复
服务器代码
Option Explicit
Private intMax As Long 'winsock最大的下标

Private Sub Form_Load()
intMax = 0
Winsock1(0).LocalPort = 7699 '本地监听的端口
Winsock1(0).Listen

End Sub
'*************************************************************************
'**函 数 名:Winsock1_ConnectionRequest
'**输 入:Index(Integer) -
'** :ByVal requestID(Long) -
'**输 出:无
'**功能描述:对方请求连接时候触发,当没有以前已经关闭的控件的winsock控件数组的话就创建
'**全局变量:
'**调用模块:
'**作 者:影子
'**日 期:2005-02-06 08:39:12
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)

If Index = 0 Then
Dim i As Integer
Dim temp As Integer
temp = 0
For i = 1 To intMax
If Winsock1(i).State = 0 Then
temp = i
Exit For
End If
Next
If temp = 0 Then
intMax = intMax + 1
temp = intMax
End If
Load Winsock1(temp)

Winsock1(temp).LocalPort = 0

Winsock1(temp).Accept requestID
End If

End Sub
yanexp 2005-05-16
  • 打赏
  • 举报
回复
要用数组才行 将sock的index设为0

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


1,502

社区成员

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

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