Hallo
ich habe hier einen Socket Client mit dem ich auf meinem Perl-Server zugreife.
Mein Problem ist das der Client beim Senden auch Empfangen will, das zum Absturz der Client führt,
Der Client Code:
Der Perl Server:
nehme ich den Teil raus:
geht alles Bestens.
Kann ich irgend wie eine Schleife einbauen, so das er nur Encoded wemm auch Daten da sind? oder habe ich wo anderst den Fehler ??
MfG
Haufe
Edit : Der Fehler Liegt in der Zeile
ich habe hier einen Socket Client mit dem ich auf meinem Perl-Server zugreife.
Mein Problem ist das der Client beim Senden auch Empfangen will, das zum Absturz der Client führt,
Der Client Code:
VB.NET-Quellcode
- Imports System.Net
- Imports System.Net.Sockets
- Imports System.Text
- Public Class Form1
- Dim remoteIPAddress As IPAddress
- Dim ep As IPEndPoint
- Dim tnSocket As Socket
- Dim ip As String
- Dim port As String
- Private Sub VerbindenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VerbindenToolStripMenuItem.Click
- If ip = "" Then
- ip = InputBox("Bitte die ip angeben")
- port = InputBox("Bitte die port angeben")
- End If
- If VerbindenToolStripMenuItem.Text = "Trennen" Then
- tnSocket.Close()
- remoteIPAddress = Nothing
- ep = Nothing
- tnSocket = Nothing
- VerbindenToolStripMenuItem.Text = "Verbinden"
- Else
- SendCommands(ip, port)
- End If
- End Sub
- Private Sub SendCommands(ByVal PIPAddress As String, ByVal PPort As String)
- Dim RecvString As String = String.Empty
- Dim NumBytes As Integer = 0
- remoteIPAddress = IPAddress.Parse(PIPAddress.Trim)
- ep = New IPEndPoint(remoteIPAddress, CType(PPort.Trim, Integer))
- tnSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
- Dim RecvBytes(255) As [Byte]
- Try
- tnSocket.Connect(ep)
- Catch oEX As SocketException
- Exit Sub
- End Try
- Try
- If tnSocket.Connected Then
- VerbindenToolStripMenuItem.Text = "Trennen"
- Do
- NumBytes = tnSocket.Receive(RecvBytes, RecvBytes.Length, 0)
- RecvString = RecvString + Encoding.ASCII.GetString(RecvBytes, 0, NumBytes)
- Loop While NumBytes = 256
- ListBox1.Items.Add(RecvString)
- ' -------------------------------------------------------------------
- Wait(1000)
- End If
- Catch oEX As Exception
- End Try
- End Sub
- Private Sub Wait(ByVal PMillseconds As Integer)
- Dim TimeNow As DateTime
- Dim TimeEnd As DateTime
- Dim StopFlag As Boolean
- TimeEnd = Now()
- TimeEnd = TimeEnd.AddMilliseconds(PMillseconds)
- StopFlag = False
- While Not StopFlag
- TimeNow = Now()
- If TimeNow > TimeEnd Then
- StopFlag = True
- End If
- Application.DoEvents()
- End While
- TimeNow = Nothing
- TimeEnd = Nothing
- End Sub
- Sub send(ByVal Command As String)
- ' Dim RecvString As String = String.Empty
- Dim NumBytes As Integer = 0
- Dim SendBytes As [Byte]() = Encoding.ASCII.GetBytes(Command & vbCrLf)
- Dim RecvBytes(255) As [Byte]
- Try
- tnSocket.Send(SendBytes, SendBytes.Length, SocketFlags.None)
- ' Do
- 'Wait(2000)
- 'NumBytes = tnSocket.Receive(RecvBytes, RecvBytes.Length, 0)
- ' RecvString = RecvString + Encoding.ASCII.GetString(RecvBytes, 0, NumBytes)
- ' Loop While NumBytes = 128
- 'ListBox1.Items.Add(RecvString)
- Catch ex As Exception
- MsgBox("Keine Verbindung")
- End Try
- End Sub
- Private Sub cmdSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSend.Click
- send(sendtxt.Text)
- End Sub
- End Class
Der Perl Server:
Quellcode
- use IO::Socket;
- use Net::hostent;
- $PORT = 8177;
- $server = IO::Socket::INET->new( Proto => 'tcp',
- LocalPort => $PORT,
- Listen => SOMAXCONN,
- Reuse => 1);
- die "can't setup server" unless $server;
- print "Waiting for connection...\n";
- while ($client = $server->accept()) {
- $client->autoflush(1);
- print $client "Welcome to Server!\n\n";
- $hostinfo = gethostbyaddr($client->peeraddr);
- printf "[Connect from %s]\n", $hostinfo->name || $client->peerhost;
- #print "Connection received from $client->peeraddr\n";
- while(<$client>) { print }
- while(<client>){print $client "Anfrage wird bearbeitet!\n\n";}
- print $client "Welcome to Server!\n\n";
- #$message = <$client>;
- # print "Incoming message: $message\n";
- }
- #close $client;
nehme ich den Teil raus:
geht alles Bestens.
Kann ich irgend wie eine Schleife einbauen, so das er nur Encoded wemm auch Daten da sind? oder habe ich wo anderst den Fehler ??
MfG
Haufe
Edit : Der Fehler Liegt in der Zeile
ähh? wasn das
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „haufe“ ()