TCP Daten an Webserver Senden + Empfangen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bobo2040

Betreff: TCP Daten an Webserver Senden + Empfangen

BeitragMi, Jul 17, 2013 7:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Ich kenne BlitzBasic noch nicht so lange findes aber recht leicht... ;D
Fast so leicht wie AutoIT^^
So und da hätte ich mal ne Frage und Zwar möchte ich fürs erste mal einen kleinen Chat machen der soll die Daten über den TCP - Server an ein PHP File auf meiner Domain schicken die datei sieht in etwa so aus:
Code: [AUSKLAPPEN]

<?php
//Connecten
if(isset($_GET['username']) {
     $username = //Escaped $_GET['username'];
}else{
     $UserErr = "Username zu kurz !";
}


if(isset($_GET['text']) {
    $text = //Escaped %$_GET['text'];
}else{
    $textErr = "Nachricht zu kurz!";
}
//Querys machen falls beide Gesetzt wurden ...
// Falls nicht Fehler an Server zurücksenden

So und da kommt jetzt mein Problem und zwar weiß ich nicht wie man Daten sendet/empfängt.. also ich weiß / denke mir das die Daten über GET gesendet werden... macht ja kein sinn die zu verstecken ^^ so und die daten würden dann ja denke ich mal inetwa so in den BB string reingemacht werden ?
Code: [AUSKLAPPEN]

print("Username:")
Varusername = input$()
print("Nachricht")
Vartext = input$()
;Verbindung herstellen...
;.. dort irgendwo einfügen : ... username + Varusername&text + Vartext ..

So das ist aber mehr oder weniger nur interpretiert... weiß jetzt nicht obs richtig ist... kann mir jemand vllt. nen link zu nem Tutorial oder so schicken wo sowas beschrieben ist ? Also Daten empfangen und Senden ?
Mfg Bobo2040

Eingeproggt

BeitragMi, Jul 17, 2013 9:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein problem wurde schon mehrfach im Forum behandelt, ich kann nach kurzer Suche am ehesten dieses Thema empfehlen:
https://www.blitzforum.de/foru...hlight=php

Dort ist ein ausführliches Tutorial in der ersten Antwort verlinkt. Ohne genauer zu lesen was so diskutiert wurde würde ich aber empfehlen, den Code von Chrise (2. Antwort) her zu nehmen. Da musst du erstens nicht ellenlang irgendwas über php lesen was du wohl eh schon weißt und hast beim HTTP-Request die (meiner Meinung nach) benötigte Host-Angabe dabei.
Für alles weitere wäre dann die Dokumentation zu den TCP-Befehlen und ein wenig Kenntnis von HTTP (siehe Wikipedia) empfehlenswert.

mfG, Christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Bobo2040

BeitragMi, Jul 17, 2013 10:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay cool danke Very Happy !
 

Bobo2040

BeitragSo, Jul 21, 2013 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
So Very Happy
Ich habe mich jetzt mal nen bisschen damit befasst *bisschen*
Und bin nun auf ein Problem gestoßen und zwar möchte ich das permanent daten an die datenbank geschickt werden und das in einer while schleife Very Happy für nen MMO Spiel ... habe es jetzt erst einzeln getestet wenn ich mich umd eins nach rechts oder so bewege wirds in die db geschrieben aber danach kann ich machen was ist will es passiert einfach nix mehr....
Habes schon mit While probiert hat auch nichts genützt
hier mal mein Code
BlitzBasic: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()
Global x=100
Global y=100
Global TCPTimer=CreateTimer(20)

Print "Verbunden! Sende Anfrage..."
tcp = OpenTCPStream("127.0.0.1", 80)
If Not tcp Print "Fehlgeschlagen TCP Conn"

Repeat
Cls
If KeyDown(205) Then
x=x+1
ElseIf KeyDown(203) Then
x=x-1
ElseIf KeyDown(208) Then
y=y+1
ElseIf KeyDown(200) Then
y=y-1
EndIf

Rect x,y,10,10

If MilliSecs() > Timer
WriteLine tcp, "GET http://localhost/test/index.php?x="+x+"&y="+y+"&from= HTTP/1.0"
WriteLine tcp, Chr$(10)
WaitTimer(TCPTimer)
EndIf
Text 300,20,"Timer:"+Timer,True,False
Text 300,40,"MilliSecs"+MilliSecs(),True,False

Flip 0
Until KeyHit(1)
CloseTCPStream tcp
End

DAK

BeitragSo, Jul 21, 2013 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo kommt die Variable Timer her? Ich seh nur, dass sie überprüft und ausgegeben wird, sie wird aber nie initialisiert oder verändert...
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragSo, Jul 21, 2013 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
hatte ich vergessen hinzuzufügen habe nen bisschen rumgespielt Very Happy
und aber es geht trozdem nicht
BlitzBasic: [AUSKLAPPEN]

Global Timer=0
;Do something
;Am ende der IF anweisung
Timer=MilliSecs()

Pummelie

BeitragMi, Jul 24, 2013 7:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich gebe dir mal einen Tipp.

Bevor man ein Protokoll benutzt, sollte man dessen Funktionsweise kennen.
Du benutzt hier HTTP, genauer genommen HTTP Version 1.0.
Nun ist es so, das HTTP 1.0 nur eine Anfrage zulässt (danach wird die Verbindung getrennt).

Wenn du nun also mehr Daten an den Server sendest, muss er es ignorieren, im normalfall wird die Verbindung nach dem Abarbeiten des Befehls vom Server sogar getrennt.


Deine Möglichkeiten sind also folgende:
1. Du baust nach jeder Anfrage eine neue Verbindung auf, was aber (vorallem unter BB) nicht zu empfehlen ist.
2. Du verwendest HTTP 1.1

Solltest du dich für 2. entscheiden, kommen aber natürlich neue Herausforderungen auf dich zu, da dieses Protokoll auch wieder einiges an Richtlinien mit sich bringt.
Code: [AUSKLAPPEN]
- Host Header muss gegeben sein
- Connection Header muss gegeben sein

Und natürlich kann der Server auch eine Aufrechterhaltung der Verbindung verneinen, und du musst für diesen Fall auch gerüstet sein.

Ich habe hier mal eine Funktion getippt, die das Übertragen der Daten auf den Server per HTTP/1.1 Protokollkonform übernimmt. (Beachte das ich schon sehr lang nichts mehr in BB geschrieben habe, und der Code so nicht zwangläufig funktioniert)
Meine Bitte an dich: Übernehme diese Funktion nicht, sondern versuche sie selbst zu schreiben und daraus zu lernen.
Und wenn du dabei bist kannst du dir auch noch diesen Wikipedia Artikel über das HTTP Protokoll ansehen, damit du ein paar Grundinformationen darüber erhälst.
Ich möchte dir auch noch ans Herz legen, das du diese Idee mit einem MMO welches über PHP an eine Datenbank angeschlossen ist nochmal durch den Kopf gehen lässt, denn es hat seine Nachteile, die ich dir hier auch nocheinmal dalege.
Code: [AUSKLAPPEN]
- PHP kommuniziert über HTTP was eine riesige unnötige Netzlast erzeugt
- PHP ist von der Geschwindigkeit her vom HTTP Server abhängig, und ein dediziertes Serverprogramm ist deutlich Resourcensparender
- Das HTTP Protokoll ist nicht für diese Verwendung ausgerichtet
- Modere Webserver sperren den Zugriff bei zuviel Anfragen da von einem DoS Angriff ausgegangen wird


BlitzBasic: [AUSKLAPPEN]

;Für diese Funktion muss eine Datei /init.php existieren, eine Funktion muss diese nicht haben
;InitConnection muss vor der Hauptschleife aufgerufen werden.
Global connection,trash_buffer

Function InitConnection() ;Einleiten der Verbindung
Local tmp$
connection=OpenTCPStream("127.0.0.1",80)
trash_buffer=CreateBank(512)
If connection=0 Then RuntimeError("Verbindung konnte nicht aufgebaut werden")
WriteLine(connection,"GET /init.php HTTP 1.1")
WriteLine(connection,"Host: localhost")
WriteLine(connection,"Connection: Keep-Alive")
WriteLine(connection,"")
Repeat
tmp$=ReadLine$(connection)
If Lower$(Left$(tmp$,11))="connection:" Then
If Lower$(Right$(tmp$,5))="close" Then RuntimeError("Server lehnt Dauerverbindung ab!")
ReadTrash()
Exit()
EndIf
Forever
End Function

Function PostPosition(x,y) ;Position spammen
WriteLine(connection,"GET http://localhost/test/index.php?x="+x+"&y="+y+"&from= HTTP/1.1")
WriteLine(connection,"Host: localhost")
WriteLine(connection,"Connection: Keep-Alive")
WriteLine(connection,"")
ReadTrash()
End Function

Function ReadTrash() ;Die Serverrückgabe MUSS eingelesen werden
Local bytes=ReadAvail(connection)
If bytes>0 Then
If bytes>512 Then
Repeat
bytes=ReadAvail(connection)
If bytes=0 Then Exit()
If bytes>512 Then bytes=512
ReadBytes(trash_buffer,connection,0,bytes)
Forever
Else
ReadBytes(trash_buffer,connection,0,bytes)
EndIf
EndIf
End Function
It's done when it's done.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group