TCP-Fehler
Übersicht

![]() |
GeeeckoBetreff: TCP-Fehler |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist der Code (BlitzBase.de):
Server: svrGame=CREATETCPSERVER(8080) IF svrGame<>0 THEN PRINT "Server erfolgreich gestartet" ELSE PRINT "Server konnte nicht gestartet werden" END END IF WHILE NOT KEYHIT(1) strStream=ACCEPTTCPSTREAM(svrGame) IF strStream THEN PRINT READSTRING$(strStream) DELAY 2000 ELSE PRINT "Keine Daten mehr..." DELAY 1000 END IF WEND CLOSETCPSERVER svrGame END clint: strmGame=OPENTCPSTREAM("127.0.0.1",8080) IF strmGame<>0 THEN PRINT "Client erfolgreich verbunden" ELSE PRINT "Konnte keine Verbindung herstellen" WAITKEY END END IF repeat if keydown(59) ;F1 chat$=input("") writestring strmGame,chat$ endif PRINT "Daten gesendet..." until keyhit(1) CLOSETCPSTREAM strmGame END das geht nicht. ich kann immer nur einmal senden dann mus ich clint neustarten ;( woran ligt das? Sorry für die vielen Threads |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
das liegt daran das der code für mehr nicht ausgelegt ist^^
lies dir mal das Beispiel in der OH zu ql:AcceptTCPStream durch und dir wird was gravierendes auffallen! |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
- Zuletzt bearbeitet von 5k41 am Sa, März 11, 2006 18:08, insgesamt einmal bearbeitet
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohhh...
das is peinlich sorry aber wie mache ich es für immer? so das ich immer senden kann? |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
DU musst halt die "ID" des Clients die per AcceptTCPStream aufgenommen wird speichern und dann jeden schleifen durchlauf auf nachrichten von diesem Spieler testen! | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
mache ich das nicht mit [b]INPUT[/b]=accepttcpstream(server)? | ||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
nein guck mal: AcceptTCPStream gibt immer NULL zurück AUSSER wenn ein Spieler GERADE NEU JOINT wenn das passiert wird die ID des Spielers zurückgegeben, mit der du auf Nachrichten prüfen kannst nun musst du wenn AcceptTCPStream <>0 ist einfach sagen das er den wert von AcceptTCPSTream in nem Type (der wenn du die nicht verstehst nimm nen Array oder sonst irgendwas) speichern. Nun kannst du per ReadString(playerID) einfach seine Nachrichten auslesen! | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
achso^^
danke danke *1000 ![]() achso, das sind die komischen zahlen wenn man debuglog macht ![]() |
||
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie kann ich dann zu allen schreiebn?
alle id´s durch laufen lassen? |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso an alle schreiben? Es müssen doch nur alle abrufen schreiben tut mans doch nicht an eine ID^^ | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
sondern dann an in den stream der mit openaccept´stream geöffnet wurde oder? | ||
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und wie soll ich die id vom server rausbekommen? | ||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
gaia, jetzt reichts, du must nicht alle 5 Minuten auf deine eigenen Threads
antworten, nur um sie wieder nach oben zu pushen... d-bug |
||
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mache ich auch gar net ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Tust du sehr wohl. Wenn niemand antwortet, weiss es niemand, es ist niemand da, der dir grad helfen kann oder es interessiert einfach niemanden, weil in FAQ und tutorial als auch in den Userlibs beispielprogramme für Chat etc sind und du dich selbst bemühen kannst.
Werde dir künftig jeden gepushten Thread dicht machen, bis du aufhörst damit! (siehe Regeln, ist verboten) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit ReadLine(playerid) functioniert net ![]() For player.player=Each player If ReadLine(player\id)>0 msg$=ReadString(player\id) If msg$="--c" Then player\y=player\y-16 If msg$="--d" Then player\y=player\y+16 If msg$="--e" Then player\y=player\x-16 If msg$="--f" Then player\y=player\x+16 EndIf Next aber ich will doch gar nicht pushen ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hast du versucht erst die Daten mit Readline auszulesen und danach die For "each player" loop zu machen um zu sehen, für wen die Nachricht ist?
Andernfalls wird er wahrscheinlich für jeden Player eine Zeile auslesen und verwirft ihre Daten, wenn gerade der falsche Player nachsieht (was wohl die meiste Zeit passiert) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Muss ich denn einfach nur Readline(player\id) machen?
er sagt immer das es den stream nicht gibt ![]() @drameon In dieser Each schleife wird doch immer readline(player\id) gemacht. also ließt er doch richtig |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hast du eventuell den Code der etwas zeigt.
Bei obigem Code am Anfang müsste dein Code in etwa so sein: (sage in etwa weil nicht getestet) Code: [AUSKLAPPEN] ; Annahme: Es wird das ganze Packet als 1 String gesendet ; Der Playertype hat ein Feld ID in dem die Streamid drin gespeichert wurde (das was von accept... zurück gegeben) ; Im Beispiel am Anfang war das strStream while not quit For player.player=Each player If ReadLine(player\ID)>0 msg$=ReadString(player\id) If msg$="--c" Then player\y=player\y-16 If msg$="--d" Then player\y=player\y+16 If msg$="--e" Then player\y=player\x-16 If msg$="--f" Then player\y=player\x+16 EndIf Next wend |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
wie bekomme ich die id vom server heraus?
Hier gebauer: Code: [AUSKLAPPEN] Server: Graphics 500,500,32 server=CreateTCPServer(3855) Repeat new_id=AcceptTCPStream(server) If new_id Print "Spieler mit der ID "+new_id+" erschaffen!" ;anderen spielern bescheidt sagen WriteLine new_id,"--a,"+new_id EndIf Until KeyHit(1) Empfänger: Function Abrufen() ;player bewegen For player.player=Each player If ReadLine(player\id)>0 msg$=ReadString(player\id) If msg$="--c" Then player\y=player\y-16 If msg$="--d" Then player\y=player\y+16 If msg$="--e" Then player\y=player\x-16 If msg$="--f" Then player\y=player\x+16 EndIf Next ;server abfragen If ReadLine(stream)>0 msg$=ReadString(stream) code$=Mid(msg$,1,Instr(msg$,",")) If code$="--a" nummer=Mid(msg$,Instr(msg$,",")+1,Len(msg$)) CreatePlayer(nummer) meldung$="neuer gamer!" EndIf EndIf End Function was ist bloß falsch? ich sitze schoin seit heute morgen da ran ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OPENTCPSTREAM gibt dir den Stream beim Client.
Dort brauchst du ja keinen Type, da es nur einen TCP Stream gibt. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group