VB.NET - TCP Server & Client - mehrere Anfragen VB 

  • Ersteller Ersteller fox(fux)
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
F

fox(fux)

Hallo Leute,
ich habe 2 Programme geschrieben:
Einmal einen Client und dann noch einen Server.
Diese 2 kommunizieren via TCP.
Wenn man den Server startet, lauscht dieser auf Port 60000(TCP) auf einen Clienten. Wenn jetzt ein Kollege von mir den Clienten startet, dann verbindet sich dieser mit dem Server bei mir und sendet 2, 3 Zeilen Text die ich benötige.
Aber wie kann ich es machen, dass wenn sich 2 Clienten gleichzeitig zu meinem Server verbinden, der Server zuerst den ersten Client verarbeitet und dann auf den zweiten geht...

Gibt es hierzu eine Lösung?

Hier der Code:

Code:
Dim bytes(1024) As Byte
Dim countBytesFromClient As Int32

Dim server As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)
Dim ipHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName())
Dim ipAdress As IPAddress = ipHostInfo.AddressList(0)
Dim localEP As New IPEndPoint(ipAdress, 60000)
server.Bind(localEP)
Try
restart:
Console.Clear()
server.Listen(1)
Console.WriteLine("Waiting for data at port 60000(TCP)...")

clientSocket = server.Accept()

Console.Clear()
Console.WriteLine("Waiting for data at port 60000(TCP)...")
Console.WriteLine("Connection established!")

countBytesFromClient = clientSocket.Receive(bytes)
inv_Name = (Encoding.ASCII.GetString(bytes, 0, countBytesFromClient))[COLOR='SeaGreen'] 'erste Data welche ich benötige[/COLOR]
Dim answer1() As Byte = Encoding.ASCII.GetBytes("Name_erhalten")
clientSocket.Send(answer1)
countBytesFromClient = clientSocket.Receive(bytes)
Nachricht = (Encoding.ASCII.GetString(bytes, 0, countBytesFromClient))
Dim answer2() As Byte = Encoding.ASCII.GetBytes("Nachricht_erhalten") [COLOR='SeaGreen']'zweite Data welche ich benötöige.[/COLOR]
clientSocket.Send(answer2)

Console.Write("Message from: ")
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine(inv_Name)
Console.ForegroundColor = ConsoleColor.Gray
Console.Write("Message: ")
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine(Nachricht)
Console.ForegroundColor = ConsoleColor.Gray


clientSocket.Close()
GoTo restart [COLOR='SeaGreen'] 'wenn ich dann wieder oben auf restart bin, kann problemlos ein weiterer Client verbinden![/COLOR]
Catch ex As Exception
'Fehlerbehandlung
End Try

Wie kann ich das Problem mit den 2 Clienten gleichzeitig lösen?
Aber bitte lasst mich nicht den kompletten Code neuschreiben. ^^
Achja: Das ist meine erste TCP Anwendung, die ich soweit ohne Forenhilfe aufgestellt habe. (Hilfe war ein PDF von Galileo Computing)
Habe im Code alles "Nicht Wichtige" der Übersicht zuliebe herausgelöscht...

Danke für euer Bemühen!
mfg fox(fux)
 
Der Parameter "1" beschreibt die Größe der warteschlange die der Server anlegt wenn mehrere Clients eine Verbindung aufbauen. Bei dir ist die auf 1 gesetzt, d.h. du erlaubst nur eine Verbindung, die anderen werden nicht in die Warteschlange gesetzt.

Theoretisch sollte es ausreichen den Parameter zu erhöhen, damit beide clients verarbeitet werden.
 
Danke, danke....
Aber wann werden diese verarbeitet?
Nach welcher Zeile?
Nach "clientSocket.Close()"??

DANKE fox(fux)

Ich bekomme manchmal beim Server eine Fehlermeldung:
"System.Net.Sockets.SocketException: Eine vorhandene Verbindung wurde vom Remotehost geschlossen _ bei System.Net.Sockets.Socket.Receive(Byte[] buffer) _ bei inviteServer.Module1.Main()"
Was bedeutet das?

mfg

Hier kann auch zu --- closed
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten