[TCP] mehrere Nachrichten senden/empfangen?!

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

DerKeks

Betreff: [TCP] mehrere Nachrichten senden/empfangen?!

BeitragMo, Okt 08, 2007 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey
Ich habe gerade mal ein kleines Server/Client-System via TCP gecodet...
Der Server wird erstellt und liest die kommenden Daten, kommt nichts, schreibt er dass nichts kommt^^
Der Client sendet im 1-Sekunden-Takt etwas ( 3..., 2..., 1..., QUIT! ), jedoch schreibt der Server nur das "3..." und danach kommt nur noch "Kommt nix".. Also irgendwie gehen meine restlichen 3 Strings unterwegs verloren... Bzw. der Server empfängt sie nicht/zeigt sie nicht an...
Weiss einer woran das liegt?

Zum besseren Verständnis poste ich mal den Code...

Server:
Code: [AUSKLAPPEN]
svr=CreateTCPServer(8866)
   If Not svr
      Print "Server konnte nicht gestartet werden!"
      WaitKey:End
   Else
      Print "Server online!"
      While Not KeyHit(1)
         stream=AcceptTCPStream(svr)
         If stream
            in$ = ReadString$(stream)
            Print in$
            Delay 2000
         Else
            Print "Kommt nix..."
            Delay 1000
         EndIf
      Wend
      CloseTCPServer svr
      WaitKey
      End
   EndIf


Client:
Code: [AUSKLAPPEN]
stream=OpenTCPStream("127.0.0.1", 8866)
   If Not stream
      Print "Server offline oder nicht erreichbar!"
      WaitKey
      End
   Else
      Print "Verbunden!"
      WriteString stream, "3..."
      Delay 1000
      WriteString stream, "2..."
      Delay 1000
      WriteString stream, "1..."
      Delay 1000
      WriteString stream, "QUIT!"
      Print "Alles vorbei!"
      CloseTCPStream stream
      WaitKey
      End
   EndIf


Gruss - DerKeks

Smily

BeitragMo, Okt 08, 2007 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi,
Du darfst AcceptTCPstream nur einmal pro client machen:

Code: [AUSKLAPPEN]
svr=CreateTCPServer(8866)
   If Not svr
      Print "Server konnte nicht gestartet werden!"
      WaitKey:End
   Else
      Print "Server online!"
      repeat
         stream=AcceptTCPStream(svr)
      until stream
      While Not KeyHit(1)
         in$ = ReadString$(stream)
         Print in$
      Wend
      CloseTCPServer svr
      WaitKey
      End
   EndIf
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

ReLeNtLeSS

BeitragMo, Okt 08, 2007 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe damit noch nich gearbeitet, aber für mich sieht es so aus als das du den Stream mehrmals abfragen musst! D.h. beim ersten Abfragen überträgt der dir ein "3..." beim zweiten ein "2..."

teste das mal Wink


/Edit: Er war schneller Razz

DerKeks

BeitragMo, Okt 08, 2007 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn ich das von Smily richtig verstanden habe, sucht er so lange nach Clients, bis er einen gefunden hat ( Until stream ) und dann erst beginnt die eigentliche Übertragung?...
Ich werds so mal versuchen, danke

edit:
Bei der Idee von Smily kommt garnichts...
Am Anfang "Server online!" und nach dem Senden is alles weg...
 

Dreamora

BeitragMo, Okt 08, 2007 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Aktuellen Code bitte
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

DerKeks

BeitragMo, Okt 08, 2007 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
svr=CreateTCPServer(8866)
   If Not svr
      Print "Server konnte nicht gestartet werden!"
      WaitKey:End
   Else
      Print "Server online!"
      Repeat
         stream = AcceptTCPStream(svr)
      Ulntil stream
      While Not KeyHit(1)
         If stream
            in$ = ReadString$(stream)
            Print in$
            Delay 2000
         Else
            Print "Kommt nix..."
            Delay 1000
         EndIf
      Wend
      CloseTCPServer svr
      WaitKey
      End
   EndIf


Edit: Mh... Also nachdem ich BlitzIDE neu gestartet hab und neu geöffnet hab, gehts... Nur wenn dass alles gesendet wurde kommt ein "Memory Access Violation"... Kann man den noch umgehen?
 

Dreamora

BeitragMo, Okt 08, 2007 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Indem du nicht stupide liest sondern guckst ob überhaupt etwas verfügbar ist zum lesen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am Di, Okt 09, 2007 11:09, insgesamt einmal bearbeitet

DerKeks

BeitragMo, Okt 08, 2007 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mit
If stream <> "" Then Print ReadString$(stream)
?

Mathias-Kwiatkowski

BeitragDi, Okt 09, 2007 10:12
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich versteh nicht warum der server überhaupt übermittelt das nix kommt oder habe ich das falsch verstanden, also naja wenn der server einmal in einer sekunde an einem client schreibt " es kommt nix " dann ist das überflüssiger traffik beim server und auch bei den clienten. und vorallen laggt es bestimmt irgendwann wenn man mehrere clients startet.

also wenn nix zum weitergeben ist, braucht man auch nix senden.

und ja das hier
Code: [AUSKLAPPEN]
If stream <>  Then Print ReadString$(stream)

ist soweit ok nur halt die "" haben vll etwas gestört, ich habe nun leider keine zeit den rest des codes anzusehn, werde es aber nachholen.

mfg


EDIT:

Code: [AUSKLAPPEN]
stream=OpenTCPStream("127.0.0.1", 8866)
   If Not stream
      Print "Server offline oder nicht erreichbar!"
      WaitKey
      End
   Else
      Print "Verbunden!"
      WriteString stream, "3..."
      Delay 1000
      WriteString stream, "2..."
      Delay 1000
      WriteString stream, "1..."
      Delay 1000
      WriteString stream, "QUIT!"
      Print "Alles vorbei!"
      CloseTCPStream stream
      WaitKey
      End
   EndIf


ähm Delay in einem Server???

und ähm delay in einem client? damit hältst du den kompletten ablauf des programms an das weisst du oder?
 

Dreamora

BeitragDi, Okt 09, 2007 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein der Vergleich bringt nix.
Der sagt nicht ob etwas zum lesen drin ist.

Schau dir bitte erst Mal http://www.blitzbase.de/menu/2q.htm und http://www.blitzbase.de/menu/2t.htm an bevor du weitere Fragen stellst. Du scheinst dich nicht bis total unzureichend damit auseinander gesetzt zu haben.

Ein TCP Stream ist auch ein Stream deswegen kannst du mit den dortigen Befehlen auch überprüfen ob es etwas zum Auslesen hat (readAvail ) etc
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

DerKeks

BeitragDi, Okt 09, 2007 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
1.)
Die Delays und das "Kommt nix" waren nur testweise, um zu sehen, ob er nun was empfängt oder nicht.
Und das "kommt nix" wurde im Server window angezeigt und nicht an die Clients gesendet Wink
Der Server sendet bei diesem Beispiel garnichts an die Clients.

2.)
Ich habe mir die Befehlstabellen zu TCP angeschaut und habe auch meine Programme nach dem Prinzip der dort gezeigten Beispiele aufgebaut. Nur dummerweise wird im Beispiel nur ein String übermittelt, Ich versuche/will jedoch mehrere Strings senden.

Trotzdem danke für eure Hilfe

Markus2

BeitragDi, Okt 09, 2007 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
3x =
in$ = ReadString$(stream)
in$ = ReadString$(stream)
in$ = ReadString$(stream)

würde dir aber empfelen zuerst ein Kommando zu senden
das du weißt was rein kommt

Select CMD$
Case "STR3"
in1$ = ReadString$(stream)
in2$ = ReadString$(stream)
in3$ = ReadString$(stream)

DerKeks

BeitragDi, Okt 09, 2007 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay Markus ich werds mal so versuchen...
Dann kann das doch auch in eine For...Next Schleife oder?
Naja erstmal danke so werd ichs versuchen.

Markus2

BeitragDi, Okt 09, 2007 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du jede Sekunde was sendest solltest du es so machen

Verbindung auf machen
Senden
Verbindung zu machen

Warten

Verbindung auf machen
Senden
Verbindung zu machen

Warten

Verbindung auf machen
Senden
Verbindung zu machen

DerKeks

BeitragDi, Okt 09, 2007 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja gut danke.
So werd ichs versuchen.
Heute nicht mehr muss noch was lernen aber morgen.
Ich meld mich dann wenns mehr Probleme gibt Smile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group