tcp problem
Übersicht

![]() |
PucciniBetreff: tcp problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich bin grad dabei für mein Spiel ein server-client-programm zu schreiben. Dabei will ich einen Server haben, welcher alle Clients verwaltet und halt ein Client-Programm welches sich dann mit dem server connected. Wenn ich den Server auf meinem Rechner starte und dann den client geht alles. Doch wenn ich noch einen Client startet kommt es zu fehlern beim senden und beide clients verlieren den server..... auch wenn ich einen client auf meinem rechner und den 2. aufeinem anderen starte bricht alles ab.. was mach ich da falsch? hier mal code-snippez vom server: Code: [AUSKLAPPEN] global server_stream%=CreateTCPServer(netport%)
If server_stream%=0 RuntimeError("Server konnte nicht erstellt werden!") While Not KeyHit(1) ; ------------------------------------------------------- Neuer Stream stream=AcceptTCPStream(server_stream%) If stream tmpip$=DottedIP(TCPStreamIP(stream)) tmpport%=TCPStreamPort(stream) tmpname$=ReadString(stream) msg_to_all(0,stream,tmpname$) p.player=New player ...... EndIf ; ------------------------------------------------------- alle Clients auf neue Daten untersuchen For p.player=Each player getbytes%=ReadAvail(p\stream) If getbytes% While ReadAvail(p\stream) msgtyp%=ReadInt(p\stream) Select msgtyp% Case 1 ;Ping p\ms=MilliSecs() End Select Wend EndIf Next ; ------------------------------------------------------- alle Clients mit neuen Daten versorgen If MilliSecs()-last_send_time>200 For p.player= Each player WriteInt(p\stream,3) WriteInt(p\stream,p\stream) For pp.player=Each player If p\stream<>pp\stream WriteInt(pp\stream,20) WriteInt(p\stream,p\stream) WriteInt(p\stream,p\x) WriteInt(p\stream,p\y) End If Next Next last_send_time=MilliSecs() EndIf wend CloseTCPServer(server_stream) End Function msg_to_all(typ%,aktivstream,p1=0,p2=0,p3=0) For p.player=Each player If Not aktivstream=p\stream WriteInt(p\stream,typ%) Select typ Case 0 ;Neuer Spieler WriteInt(p\stream,aktivstream) WriteString(p\stream,p1) Case 1 ;Spieler disconnect WriteInt(p\stream,aktivstream) Case 2 ;Spieler timeout WriteInt(p\stream,aktivstream) End Select End If Next End Function So, ich hab einiges weggelassen, aber so is der server aufgebaut... und hier der client: Code: [AUSKLAPPEN] stream=OpenTCPStream(ip,8000)
If stream=0 RuntimeError("Kein Server gefunden") WriteString(stream,name$) While Not KeyHit(1) ;---------------------------------------------- Daten empfangen While ReadAvail(stream) typ%=ReadInt(stream) tmpstream=ReadInt(stream) Select typ% Case 0 ;neuer Player tmpname$=ReadString(stream) add_msg tmpname$+" connected" p.player=New player .... End Select Wend ;---------------------------------------------------------- Daten senden ;Send Ping um aktiv zu bleiben If MilliSecs()-last_send_time>200 WriteInt(stream,1) last_send_time=MilliSecs() EndIf Wend CloseTCPStream(stream) So, das mal imgroben vom Code! Wenn es jemandem hilf kann ich auch den code komplett online stellen! aber es wird speedtext verwendet! also sollte man diese dll dann auch haben. Danke für eure HIlfe. MfG puccini |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
und wo speicherst du die stream handles genau? im player type oder so? | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Puccini |
![]() Antworten mit Zitat ![]() |
---|---|---|
genau ![]() warte, hier is es ![]() im server: Code: [AUSKLAPPEN] Type player
Field stream Field ip$,port% Field ping%,ms% Field name$ Field x%,y% End Type ; ------------------------------------------------------- Neuer Stream stream=AcceptTCPStream(server_stream%) If stream tmpip$=DottedIP(TCPStreamIP(stream)) tmpport%=TCPStreamPort(stream) tmpname$=ReadString(stream) msg_to_all(0,stream,tmpname$) p.player=New player p\stream=stream p\ip$=tmpip$ p\port%=tmpport% p\ms%=MilliSecs() p\ping%=0 p\name$=tmpname$ new_lok(p\name$+" connected. IP: "+p\ip$) playeranz=playeranz+1 EndIf ![]() |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group