Kommunikation zwischen Server und Client
Übersicht
BlitzBasic
Allgemein
ToastyBetreff: Kommunikation zwischen Server und Client |
Antworten mit Zitat |
|
|---|---|---|
|
Hi,
ich hab mal ne Frage: Ich bin wieder dabei mein Online Game mit BB zu schreiben, aber jetzt habe ich ein Problem mit TCP... Wenn der Client eine Anfrage zum Server schickt, bekommt die Server App die Anfrage, nur dann kommt ein Runtime Error... (Illigal memory Adress) BlitzBasic: [AUSKLAPPEN]
Da die Server App nochnicht BlitzBasic: [AUSKLAPPEN] Print"Any Client("+ socket$v+") sent reqeust" angezeigt hat, gehe ich davon aus das der Fehler bei BlitzBasic: [AUSKLAPPEN] socket$=ReadString(self) liegt. Wenn ich allerdings BlitzBasic: [AUSKLAPPEN] socket$=ReadString(self) in BlitzBasic: [AUSKLAPPEN] socket$=ReadString(req) umänder, wird "Any Client("+ socket$ +") sent request" angezeigt. Aber die Variable socket$ vertretet dann komischerweise "1". Was ist das Problem? |
||
|
|
Starwar |
Antworten mit Zitat |
|---|---|---|
|
Code: [AUSKLAPPEN] If req Then Exit
req=AcceptTCPStream(self) Forever Code: [AUSKLAPPEN] socket$=ReadString(self)
AcceptTCPStream ->bei ReadString req statt self
Code: [AUSKLAPPEN] client=OpenTCPStream(socket$,201)
Wozu ist das? Ich verstehe dein Programmablauf nicht... Bitte erklärs mir MFG PS: Goto ist böse |
||
Toasty |
Antworten mit Zitat |
|
|---|---|---|
|
Also das ist eine Schleife, die immerwieder abfragt, ob ein Client nach Login fragt...
Aber AcceptTCPStream() ist doch schon req ... Gruß Toasty PS: Was kann ich denn sonst benutzen wenn er die Schleife erneut starten soll? |
||
|
|
Starwar |
Antworten mit Zitat |
|---|---|---|
Du kannst einen Type erstellen, in dem du die Streams speicherst die dir AcceptTCPStream zurückliefert. Diese Streams sind direkte Leitungen zu den Clients.
Du kannst mit einer For-Each -Schleife den Type durchgehen und jeden Stream mit ReadAvail checken ob er Daten liefert und dann bei bedarf auslesen.
Das AcceptTCPStream bleibt in der Hauptschleife. Pseudo-Code: [AUSKLAPPEN] server=CreateTCPServer(port%)
Repeat If neu=AcceptTCPStream(server) Then s.client = New client s\stream=neu EndIf For s.client = Each client If Not s\stream Then ;Bin ich mir nicht 100%ig sicher Delete s ;Client offline Else If bytes=ReadAvail(s\stream) > 0 Then ;Daten auslesen EndIf EndIf Next Until KeyDown(1) CloseTCPServer(server) Type client Field stream End Type EDIT: Du kannst mit ReadByte byteweise auslesen und zurück nach ASCII wandeln Chr . Oder ReadLine . Da EOF nützlich.
Schreiben kannst du in die streams, die per AcceptTCPStream kommen natürlich auch. MFG |
||
Übersicht
BlitzBasic
Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group

