Guten Morgen,
bei Herumspielen mit Socket-Verbindungen ist mir aufgefallen, dass die Antworten vom Server bei entsprechender Größe abgeschnitten werden. Laut einigen Google-Ergebnissen liegt das wohl daran, dass der Stream schon ausgegeben wird, bevor der Socket Server alles geschickt hat. Als Lösung werden mehrere Varianten empfohlen, den Client so lange loopen zu lassen, bis alle Daten vom Server da sind, der Stream also 0 wird. Allerdings hab ich es nicht geschafft, meinen Code dahingehend anzupassen, daß es funktioniert, die Beispiele, die ich da gefunden habe, bringen mich nicht wirklich weiter. Hier ist mein Code mit While-Schleife, funktioniert aber nicht:
[highlight=vbnet]
Dim bytes(512000) As Byte
' Connect to a remote device.
Try
' Create a TCP/IP socket.
Dim sender1 As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
sender1.SendTimeout = 3000
sender1.ReceiveTimeout = 35000
sender1.ReceiveBufferSize = 8192
' Connect the socket to the remote endpoint.
sender1.Connect(TextBox1.Text, TextBox2.Text)
If sender1.Connected = True Then
Label1.Text = "Connected to: " & sender1.RemoteEndPoint.ToString()
End If
' Encode the data string into a byte array.
Dim msg As Byte() = Encoding.ASCII.GetBytes(TextBox3.Text.Trim & vbCrLf)
'Dim bytesRec As Long = sender1.Receive(bytes) & vbCrLf
TextBox4.Text = ""
' Send the data through the socket.
Dim bytesSent As Long = sender1.Send(msg)
Dim bytesRec As Long = sender1.Receive(bytes) & vbCrLf
TextBox4.Text = ""
While bytesRec > 0
TextBox4.Text = Encoding.ASCII.GetString(bytes, 0, bytesRec)
End While
' Release the socket.
sender1.Shutdown(SocketShutdown.Both)
sender1.Close()
Catch ex As Exception
Debug.Write(ex.Message)
MsgBox(ex.ToString)
Button1.Enabled = True
End Try
[/highlight]
Wo liegt der Fehler und wie müsste es richtig sein?
bei Herumspielen mit Socket-Verbindungen ist mir aufgefallen, dass die Antworten vom Server bei entsprechender Größe abgeschnitten werden. Laut einigen Google-Ergebnissen liegt das wohl daran, dass der Stream schon ausgegeben wird, bevor der Socket Server alles geschickt hat. Als Lösung werden mehrere Varianten empfohlen, den Client so lange loopen zu lassen, bis alle Daten vom Server da sind, der Stream also 0 wird. Allerdings hab ich es nicht geschafft, meinen Code dahingehend anzupassen, daß es funktioniert, die Beispiele, die ich da gefunden habe, bringen mich nicht wirklich weiter. Hier ist mein Code mit While-Schleife, funktioniert aber nicht:
[highlight=vbnet]
Dim bytes(512000) As Byte
' Connect to a remote device.
Try
' Create a TCP/IP socket.
Dim sender1 As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
sender1.SendTimeout = 3000
sender1.ReceiveTimeout = 35000
sender1.ReceiveBufferSize = 8192
' Connect the socket to the remote endpoint.
sender1.Connect(TextBox1.Text, TextBox2.Text)
If sender1.Connected = True Then
Label1.Text = "Connected to: " & sender1.RemoteEndPoint.ToString()
End If
' Encode the data string into a byte array.
Dim msg As Byte() = Encoding.ASCII.GetBytes(TextBox3.Text.Trim & vbCrLf)
'Dim bytesRec As Long = sender1.Receive(bytes) & vbCrLf
TextBox4.Text = ""
' Send the data through the socket.
Dim bytesSent As Long = sender1.Send(msg)
Dim bytesRec As Long = sender1.Receive(bytes) & vbCrLf
TextBox4.Text = ""
While bytesRec > 0
TextBox4.Text = Encoding.ASCII.GetString(bytes, 0, bytesRec)
End While
' Release the socket.
sender1.Shutdown(SocketShutdown.Both)
sender1.Close()
Catch ex As Exception
Debug.Write(ex.Message)
MsgBox(ex.ToString)
Button1.Enabled = True
End Try
[/highlight]
Wo liegt der Fehler und wie müsste es richtig sein?
Comment