ich habe im Internet ein kleines Chatprogramm für Gambas gefunden und
etwas erweitert. Mit einem Server und einem Client funktioniert alles wunderbar.
Mit zwei Clients habe ich aber noch ein Problem. Der Server kann von den zwei
Clients beliebig viele Nachrichten korrekt empfangen. Allerdings kann
der Server aus irgend einem Grund nur Nachrichten an den ersten Client senden.
Beim zweiten Client kommt nichts an. Es kommt auch keine Fehlermeldung.
Weiss jemand, was ich falsch gemacht habe? Vielen Dank für eure Hilfe.
Hier der Server:
Code: Alles auswählen
Public thisSocket[3] As Socket
Public i As Integer
Public Sub Button1_Click()
' Verbinden
ServerSocket1.Listen(3)
If ServerSocket1.Status = Net.Active Then
Button.Enabled = False
TextArea1.Text &= "Listening on Port: " & ServerSocket1.Port & gb.CrLf
End If
End
Public Sub ServerSocket1_Connection(strHostIP As String)
If ServerSocket1.Status > Net.Inactive Then
'Message("Dies ist eine Meldung", "ButtonText")
i = i + 1
thisSocket[i] = ServerSocket1.Accept()
thisSocket[i].Blocking = False
If thisSocket[i].Status = Net.Connected Then
TextArea1.Text &= "Connected: " & thisSocket[i].RemoteHost & ":" & thisSocket[i].RemotePort & gb.Lf
End If
Write #thisSocket[i], "Mit Server verbunden!" & gb.lf, Len("Mit Server verbunden!") + 1
Endif
End
Public Sub Socket_Read()
'- empfangen vom den Clients
Dim strMsg As String
If Last.Status <> Net.Connected Then Return
Read #Last, strMsg, Lof(Last)
TextArea1.Text &= "incoming message: " & strMsg & gb.Lf
End
Public Sub Button2_Click()
' senden an die Clients
Dim j As Integer
For j = 1 To 2
Wait 1
If thisSocket[j].Status <> Net.Connected Then
Message("not connected", "achtung")
Return
End If
Write #thisSocket[j], TextArea2.Text, Len(TextArea2.Text)
Next
TextArea2.Text = ""
End
Public Sub Form_Open()
ServerSocket1.Port = 12345
ServerSocket1.Type = Net.Internet
i = 0
End
Public Sub Form_Close()
ServerSocket1.close '- ok funktioniert
End
Public Sub ServerSocket1_Error()
Message.Error("Unable to bind socket")
End
Code: Alles auswählen
Public Sub Button1_Click()
' mit dem Sever verbinden
Socket2.Connect()
If Socket2.Status > Net.Inactive Then
Wait 1
If Socket2.Status = Net.Connected Then
Write #Socket2, "Hi Mr Server!", Len("Hi Mr Server!")
Else
Close #Socket2
TextArea1.Text &= ("Error: Timeout")
End If
End If
End
Public Sub Socket2_Read()
'- Nachrichten vom Server empfangen
Dim strMsg As String
If Socket2.Status = Net.Connected Then
Read #Socket2, strMsg, Lof(Socket2)
TextArea1.Text &= "incoming: " & strMsg & gb.Lf
Endif
End
Public Sub Button2_Click()
' Nachrichten an den Server senden
Dim H$ As String
H$ = TextArea2.Text & gb.Lf
Write #Socket2, H$, Len(H$)
TextArea1.Text &= H$
TextArea2.Text = ""
'Socket2_Read
End
Public Sub Form_Open()
Socket2.Host = "127.0.0.1"
Socket2.Port = "12345"
End
Public Sub form_Close()
If Socket2.Status > Net.Inactive Then
Close #Socket2
Endif
End
Public Sub ClientSocket_Error()
Select Case Socket2.Status
Case Net.CannotCreateSocket
Message.Error("Unable to create a socket")
Case Net.HostNotFound
Message.Error("Host not Found")
Case Net.ConnectionRefused
Message.Error("Remote server refused connection")
Case Net.CannotRead
Message.Error("Data read error")
Case Net.CannotWrite
Message.Error("Data write error")
End Select
End