TCP - Server/Client
Übersicht

![]() |
VertexBetreff: TCP - Server/Client |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Also anscheinend gibt es hier probleme beim übertragen von Daten. Code: [AUSKLAPPEN] Graphics 500, 200, 32, 2
SetBuffer FrontBuffer() AppTitle "Server" Const msgServer = 1 Const msgClient = 2 Type client_t Field name$ Field stream End Type Type stack_t Field msgType Field message$ Field source End Type server = CreateTCPServer(1000) If server = 0 Then Print "Can't create server" WaitKey : End EndIf While Not KeyDown(1) strClient = AcceptTCPStream(server) If strClient<>0 Then While Eof(strClient) : Wend client.client_t = New client_t client\name$ = ReadString$(strClient) client\stream = strClient stack.stack_t = New stack_t stack\msgType = msgServer stack\message$ = client\name$+" has joined" EndIf For client.client_t = Each client_t If ReadAvail(client\stream) While Not Eof(client\stream) message$ = ReadString$(client\stream) If message$ = "/end" Then stack.stack_t = New stack_t stack\msgType = msgServer stack\message$ = client\name$+" quited" stack\source = client\stream CloseTCPStream client\stream : Delete client Else stack.stack_t = New stack_t stack\msgType = msgClient stack\message$ = client\name$+": "+message$ stack\source = client\stream EndIf Wend EndIf Next For stack.stack_t = Each stack_t For client.client_t = Each client_t If stack\source<>client\stream Then WriteInt client\stream, stack\msgType WriteString client\stream, stack\message$ EndIf Next If stack\msgType = msgSerer Then Color 0, 255, 255 Print stack\message$ Else Color 255, 255, 255 Print stack\message$ EndIf Delete stack Next Wend For client.client_t = Each client_t WriteByte client\stream, msgServer WriteString client\stream, "/end" Next CloseTCPServer server : End Code: [AUSKLAPPEN] Graphics 500, 200, 32, 2
SetBuffer FrontBuffer() AppTitle "Client" Const msgServer = 1 Const msgClient = 2 serverIP$ = Input$("IP: ") tcp = OpenTCPStream(serverIP$, 1000) If tcp = 0 Then Print "Can't connect to server" WaitKey : End EndIf nick$ = Input$("Nickname: ") WriteString tcp, nick$ Print "Press F1 to write" While Not KeyDown(1) If ReadAvail(tcp) Then While Not Eof(tcp) msgType = ReadByte(tcp) message$ = ReadString$(tcp) If message$ = "/end" Then Color 0, 255, 255 Print "Server has quited" CloseTCPStream tcp WaitKey : End EndIf If msgType = msgServer Then Color 0, 255, 255 Print message$ Else Color 255, 255, 255 Print message$ EndIf Wend EndIf If KeyHit(59) Then Color 255, 255, 255 message$ = Input$("msg: ") WriteString tcp, message$ If message = "/end" Then CloseTCPStream tcp End EndIf EndIf Wend WriteString tcp, "/end" CloseTCPStream tcp End Also erstmal zum Server: Der Type client_t speichert alle Klienten ab, die mit AcceptTCPStream ermittelt wurden. In stack_t werden Messages abgespeichert die dann alle Klienten weiter gesendet werden(durch das Field source wird jedoch geprüft, das der Klient nicht seine eigene Message bekommt). Zum Klienten: Es wird in der Hauptschleife ständig geprüft, ob der Server irgendetwas sendet, wenn ja, wird es dann auch angezeigt. Das erste Byte was vom Server kommt, ist der Messagetyp, also ob das nun der Server geschrieben hat, oder ein Klient. Die eigentliche Message ist dann ein String. Mal zu meiner Vorgehensweise: - Server starten - Klient starten - Beim Klient 192.168.2.100 eingegeben (Router schaltet Port 1000 durch) - Beim Nickname "vertex" angeben - Server schreibt "vertex has joined" - Beim Klienten drück ich F1, schreibe meine Message und drücke Enter - Nix passiert auf dem Server So wie es mir scheint, funktioniert der Klient, jedoch nicht der Server, da er anscheinend dem Klient nur einmal eine Nachricht senden kann und auch empfangen, obwohl ich den Klientstream zwischenspeichere. Hat wer eine Idee? mfg olli |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group