2013-06-18 101 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! –

相關問題