2013-06-18 86 views
0

我有一个简单的Winsock服务器的聊天,这是代码:VB6 - 发送消息到Winsock的服务器聊天

Private Sub Form_Load() 
Winsock1.LocalPort = 5100 
Winsock1.Listen 
End Sub 

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) 
Winsock1.Close 
Winsock1.Accept requestID 
End Sub 

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 
Dim sData As String 
Winsock1.GetData sData 
Text1.Text = Text1.Text & sData 
End Sub 

我从iOS应用程序收到消息,但我不能以发送消息“送出数据”。

如何向所有客户端发送消息?我需要使用客户端?

谢谢。

回答

1

如果您想要将消息发送给多个客户端,那么最好的方法就是不要关闭您的winsock1侦听,并使用它来接受请求,以创建一个新的winsock控件来接受请求。这样您就可以接受来自多个来源的连接。

实施例:

第一变化为Winsock1的属性索引为0,以创建一个控制阵列。现在所有事件的签名更改都包含Index参数。

Dim NumSockets As Integer 

Private Sub Form_Load() 
    Winsock1(0).LocalPort = 5100 
    Winsock1(0).Listen 
End Sub 

Private Sub Winsock1_Close(Index As Integer) 
    Winsock1(Index).Close 
End Sub 

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long) 
    NumSockets = NumSockets + 1 
    Load Winsock1(NumSockets)    'create a new winsock control 
    Winsock1(NumSockets).Accept requestID 'use that one to accept the request 
End Sub 

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long) 
    Dim vtData As String 
    Winsock1(Index).GetData vtData, vbString 
    Print vtData 
End Sub 
+0

完美的解决方案,谢谢! – Kerberos

+0

不完美,但指向真正的解决方案。您无法永远向数组添加更多控件,通常DataArrival事件需要更多逻辑来处理流碎片。 – Bob77

+0

当然可以花费大量的时间在vb6中实现重叠IO,只是为了获得完美的解决方案,但这是vb6! –

相关问题