TCP Datenübertragung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Matthias

Betreff: TCP Datenübertragung

BeitragFr, Okt 12, 2007 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay. Auch ich Interessiere mich für die Datenübertragung via Internet(TCP)

Dazu gibt es auf BlitzBase auch ein wunderbares Beispiel.
Allerdings hat dieses Beispiel einen winzig kleinen Harken. Denn es überträgt die Daten nur einmal.

Das reicht mir aber nicht ,denn die Daten müssen alle 25ms neu übertragen werden.

Gibt es nicht irgendwo ein Code wie der auf BlitzBase der allerdings die Daten immer wieder überträgt und nicht nur einmal????
http://www.blitzbase.de/befehl...server.htm

Meine Bemühungen fuctionieren irgendwie nicht und ich weiß einfach nicht warum.




Code: [AUSKLAPPEN]

Graphics 300,100,16,2

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 25

   End If
Wend
CloseTCPServer svrGame
End


Code: [AUSKLAPPEN]

;Client
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


Strr$="Wert:"+A
strmGame=OpenTCPStream("127.0.0.1",8080)
WriteString strmGame,Strr$
 CloseTCPStream strmGame
Print Strr
If KeyDown(1)=1 Then End
Delay 25
A=A+1
Forever
 

Dreamora

BeitragFr, Okt 12, 2007 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
das kannst du auch selbst machen.
Aber einfach alle 25ms übertragen ist nicht (überhaupt alle 25ms ist nicht, dazu ist die Internet Latency nämlich zu hoch bei den meisten usern)

Was du machen musst ist folgendes:

Client:

- setze status auf datenübertrung
- startet netzwerk schleife
- wenn status auf Datenübertragung: übertrage daten
- setze status auf "wait for ok" (heisst wenn der server ein OK in den stream geschrieben hat)
- falls readavail() und OK vom server gelesen, setze status auf übertrage daten
- wiederhole dies


Server:

- starte schleife
- check readavail(), wenn was da ist, lese es und schreibe danach das OK in den stream
- wiederhole dies


Hoffe das gibt dir eine Idee

Alternativ kannst du das warten auf das OK und das schreiben von diesem Weglassen und einfach alle XX ms schreiben. Aber wie gesagt, mit 25 wirst du tendentiell eher was zubomben als gross freude haben. speziell da TCP in Blitz die folge hat, dass das programm stehen bleibt bis vom server das signal kommt das die daten korrekt angekommen sind, was 2x minimum latency bedeutet.

Für Echtzeit musst du UDP nutzen und Reliable Transfer etc selbst implementieren.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Matthias

BeitragFr, Okt 12, 2007 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank Dreamora.

So weit Functionierts jetzt. Allerdings spuckt der Server beim Beenden eine
Fehlermeldung aus und zwar abnormal program termination.

Eigentlich müste es mich nicht stören da das Programm ja sowieso zu Ende ist aber, es stört mich trozdem. Wie kann mann diese Fehlermeldung umgehen?

Code: [AUSKLAPPEN]

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 100
 
   Else
      Print "Keine Daten mehr..."
      Delay 1000
   End If
Wend
If svrGame Then CloseTCPServer svrGame
End


Code: [AUSKLAPPEN]

Repeat
strmGame=OpenTCPStream("127.0.0.1",8080)
If StrmGame<>0 Then
Cool=Cool+1
WriteString strmGame,"SuperCool^"+Cool

CloseTCPStream strmGame
End If

If KeyDown(1)=1 Then End
Delay 100
Forever

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group