Autor |
Beitrag |
NewMori
      
Beiträge: 45
Erhaltene Danke: 1
|
Verfasst: So 25.12.11 15:55
Hallo,
ich habe vor ein paar Tagen JS WebSockets entdeckt und würde nun gerne einen einfachen Server dafür schreiben. Ich habe diesen soweit auch mit einem TTCPServer implementiert, welcher die Requests im OnAccept entgegen nimmt und auswertet. Wenn ich allerdings versuche mit dem ClientSocket, welcher im OnAccept übergeben wird, eine Antwort mit ClientSocket.SendLn(s,''); zurück zu schicken kommt nichts beim Client an. Meine Frage ist daher: Gibt es irgendwelche Eigenschaften, welche ich beim Server/Clientsocket zusätzlich setzen muss um die Antwort zurück zu schicken (auslesen des Clientsockets mittels Receiveln() funktioniert ja)
Edit: Bis jetzt habe ich im TCPServer LocalHost auf "localhost", LocalPort auf 8787 und BlockMode auf bmThreadBlocking gesetzt.
MfG
NewMori
_________________ Es ist keine Kunst in ein Programm 20 Fehler zu schreiben. Die Kunst ist es das Programm dann noch zum laufen zu bekommen.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 25.12.11 16:01
Wenn Client und Server auf unterschiedlichen Rechnern laufen (oder du NICHT unter Windows arbeitest, kannst Du mit Wireshark recht einfach dir die Verbindung anschauen, ob überhaupt was gesendet wird. Zusätzlich ist es immer auch sinnvoll zu schauen, dass man nicht gerade einen leeren Text versendet (auch wenn da noch ein Zeilenumbruch dazukommen dürfte). Und dann wäre da noch der Hinweis aus Narses' Netzwerk-Tutorials bzgl. Protokollen: Man sollte sich genau anschauen, was man macht, um Datenblöcke unterscheiden zu können.
Ach ja, noch eine Notiz am Rande: Sockets sind i.d.R. gecacht und senden daher Daten nicht sofort, wenn man es nicht anfordert. Könnte also durchaus sein, dass deine Antwort noch beim Server im Cache des ClientSockets liegt. Entweder direkt noch nen Flush ausführen ODER den Nagle-Algorithmus testweise abschalten (aber wirklich nur zum Debugging!!!).
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
NewMori 
      
Beiträge: 45
Erhaltene Danke: 1
|
Verfasst: So 25.12.11 17:18
Danke für die schnelle Antwort. Ich habe mir die Tutorials nochmals angeschaut, dort wird zwar ein TServerSocket verwendet aber ich konnte es portieren. Leider zeigt sich dort der gleiche Effekt: Die Daten kommen nicht an. Für die Klasse TTCPServer habe ich leider kein Flush gefunden, auch den Nagle-Algorithmus kann ich nicht abstellen. ClientSocket.BytesSent zeigt mir allerdings an, dass alles verschickt wurde. (Leider habe ich im Moment nur einen Rechner mit Windows zur Verfügung und kann nicht mit Wireshark testen).
Ich habe ClientSocket.remoteHost testweise auf 'localhost' gesetzt, woraufhin curl "empty reply from server" zurückgab (anstatt eine leere Zeile zu zeigen). Ich denke es liegt daran, dass ich den Socket nicht richtig einstelle. Leider habe ich nirgends eine Beschreibung gefunden, welche Werte gesetzt sein müssen damit Nachrichten wieder zurück geschickt werden können. Es wäre nett wenn jemand kurz erklären könnte welche Werte im Socket gesetzt werden müssen damit der Socket Daten zurück schicken kann.
_________________ Es ist keine Kunst in ein Programm 20 Fehler zu schreiben. Die Kunst ist es das Programm dann noch zum laufen zu bekommen.
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 25.12.11 17:30
Mein Problem ist schlicht, dass ich es nicht einfach mal testen kann. Wenn du ein Testprojekt usw. posten könntest, könnte ich es mir mal anschauen. Ich habe aber wenig Lust bzw. zu wenig Zeit um das dafür nachzubauen. 
Für diesen Beitrag haben gedankt: NewMori
|
|
NewMori 
      
Beiträge: 45
Erhaltene Danke: 1
|
Verfasst: So 25.12.11 17:43
@jaenicke das wäre super. Ich habe einfach mal Code und Exe gezipped angehängt. Bis jetzt macht der Server nicht viel, außer im OnAccept-Event den Request entgegen zunehmen und zu prüfen, ob es ein WebSocket Request ist. Dort wird dann dementsprechend eine Antwort erzeugt und mit SendLn verschickt.
Einloggen, um Attachments anzusehen!
_________________ Es ist keine Kunst in ein Programm 20 Fehler zu schreiben. Die Kunst ist es das Programm dann noch zum laufen zu bekommen.
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 25.12.11 18:18
Wenn ich mit Chrome anfrage bekomme ich wie erwartet : HTTP/1.0 501 Not implemented
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Für diesen Beitrag haben gedankt: NewMori
|
|
NewMori 
      
Beiträge: 45
Erhaltene Danke: 1
|
Verfasst: So 25.12.11 18:31
Stimmt  . Damit hat sich dieses Problem wohl erledigt, vielen Dank an alle die sich die Mühe gemacht haben sich den Code anzuschauen. Ich rätsele zwar immer noch warum er es nicht gleich angezeigt hat, aber da jetzt alles läuft, hoffe ich hat sich das Problem erledigt.
Mfg
NewMori
_________________ Es ist keine Kunst in ein Programm 20 Fehler zu schreiben. Die Kunst ist es das Programm dann noch zum laufen zu bekommen.
|
|
|