Private Sub Form_Load()
INTMAX1 = 0
tcpserver(0).ListenEnd Sub
Private Sub tcpserver_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Text1 = INTMAX1
INTMAX1 = INTMAX1 + 1
Load tcpserver(INTMAX1)tcpserver(INTMAX1).Accept requestID
INTMAX1 = INTMAX1 + 1
End Sub
连接第一个用户没事,连接第二个用户就在Load tcpserver(INTMAX1)这一行出360错,对象已加载,为什么啊?
INTMAX1 = 0
tcpserver(0).ListenEnd Sub
Private Sub tcpserver_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Text1 = INTMAX1
INTMAX1 = INTMAX1 + 1
Load tcpserver(INTMAX1)tcpserver(INTMAX1).Accept requestID
INTMAX1 = INTMAX1 + 1
End Sub
连接第一个用户没事,连接第二个用户就在Load tcpserver(INTMAX1)这一行出360错,对象已加载,为什么啊?
Public INTMAX As String
Private Sub Form_Load()
INTMAX = 0
tcpserver(0).Listen
End Sub
Private Sub tcpserver_ConnectionRequest(Index As Integer, ByVal requestID As Long)
INTMAX = INTMAX + 1
Load tcpserver(INTMAX)
tcpserver(INTMAX).Accept requestID
End Sub
Private Sub tcpserver_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim STR As String
tcpserver(Index).GetData STR
Text1 = Text1 + STR
For i = 1 To INTMAX
If (tcpserver(i).State = sckConnected) Then
Debug.Print i
tcpserver(i).SendData STR
End If
Next
End Sub
为什么这么简单的问题这么久才有人回答呢=。=```,谢谢上面这位大虾了,现在代码改成了这样,发现Debug.Print i能得到所有在连接状态的编号,但是客户端只有最后登陆的那个才能收到消息呀???
看看你服务器发送数据的代码,你服务器发送数据的WINSOCK(???).SENDDATA...........
那应该改成什么样啊?
小弟水平有限,不甚理解,请麻烦把正确代码贴一下.
load tcpserver(INTMAX)
tcpserver(INTMAX).Accept requestID
这句不是accept的吗?
为什么啊~~快来高手呀~~这可是按教程写的呀~~
intMax = 0
tcpServer(0).LocalPort = 1001
tcpServer(0).Listen
Debug.Print "开始侦听.."
End SubPrivate Sub tcpServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load tcpServer(intMax)
tcpServer(intMax).LocalPort = 0
tcpServer(intMax).Accept requestID
Debug.Print "创建新的连接" & intMax & ",端口在" & tcpServer(intMax).LocalPort
End If
End SubPrivate Sub tcpServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData As String
tcpServer(Index).GetData strData
Debug.Print "第" & Index & "号服务器连接接收到信息:" & strData
End Sub你的问题在于处理tcpserver_ConnectionRequest事件的时候,没有判断Index=0,因为这里tcpserver(0)永远处在侦听状态,当有新的连接请求时,就新创建一个tcpserver,并使用随机端口来接受连接,所以记住,只有在tcpserver(0)接收到连接请求时才intMax=intMax+1
另外,这句INTMAX =INTMAX +1怎么会多余呢,去掉会报错的呀,对象已经加载...555555555
Private Sub txtSendData_Change()
Dim i As Long
For i = 1 To intMax
DoEvents '这个DoEvents一定要加
tcpServer(i).SendData txtSendData.Text
Next
End Sub你没加那个DoEvents吧,加上试试,循环发送得用DoEvents