TCPServer SendLn kommt nicht an
spacer
Autor Nachricht
NewMori
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 8625
Erhaltene Danke: 147

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 user profile iconNarses' 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
NewMori Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15841
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
NewMori Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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
DRY DRY KISS

Für diesen Beitrag haben gedankt: NewMori
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
NewMori Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45
Erhaltene Danke: 1



BeitragVerfasst: So 25.12.11 18:31 
Stimmt :shock: . 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home