TCP-Fehler

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Geeecko

Betreff: TCP-Fehler

BeitragSa, März 11, 2006 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 11, 2006 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 11, 2006 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohhh...
das is peinlich
sorry

aber wie mache ich es für immer?
so das ich immer senden kann?

5k41

BeitragSa, März 11, 2006 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 11, 2006 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
mache ich das nicht mit [b]INPUT[/b]=accepttcpstream(server)?

5k41

BeitragSa, März 11, 2006 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 11, 2006 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
achso^^
danke danke *1000
Very Happy

achso, das sind die komischen zahlen wenn man debuglog macht Smile

Geeecko

BeitragSa, März 11, 2006 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich dann zu allen schreiebn?
alle id´s durch laufen lassen?

5k41

BeitragSa, März 11, 2006 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 11, 2006 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
sondern dann an in den stream der mit openaccept´stream geöffnet wurde oder?

Geeecko

BeitragSa, März 11, 2006 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wie soll ich die id vom server rausbekommen?

d-bug

BeitragSa, März 11, 2006 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 11, 2006 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mache ich auch gar net Razz
 

Dreamora

BeitragSa, März 11, 2006 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 11, 2006 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit ReadLine(playerid) functioniert net Sad

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 Sad
 

Dreamora

BeitragSa, März 11, 2006 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 11, 2006 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Muss ich denn einfach nur Readline(player\id) machen?
er sagt immer das es den stream nicht gibt Sad


@drameon
In dieser Each schleife wird doch immer readline(player\id)
gemacht. also ließt er doch richtig
 

Dreamora

BeitragSa, März 11, 2006 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 11, 2006 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad
 

Dreamora

BeitragSa, März 11, 2006 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group