【问题标题】:vb6 - sending message into winsock server chatvb6 - 将消息发送到winsock服务器聊天
【发布时间】:2013-06-18 12:28:10
【问题描述】:

我有一个简单的 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 应用程序收到消息,但无法发送带有“sendData”的消息。

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

谢谢。

【问题讨论】:

    标签: vb6 winsock


    【解决方案1】:

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

    例子:

    第一次改变winsock1 的属性Index 为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
    

    【讨论】:

    • 并不完美,而是指向真正解决方案的指针。您不能永远向数组添加更多控件,通常 DataArrival 事件需要更多逻辑来处理流碎片。
    • 当然,为了得到一个完美的解决方案,我们可能会花费大量时间在 vb6 中实现重叠 IO,但这是 vb6!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2013-11-08
    • 2016-07-23
    • 2018-01-09
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多