Seite 1 von 2

Server / Client

Verfasst: 17.09.2008 16:47
von scoty
Hallo zusammen!
Ich habe zwei Anwendungen unter Windows XP programmiert die mit Hilfe einer Client-Server-Verbindung Kommunizieren.
Die Serveranwendung soll nun aber auf einem Linux-Rechner laufen.

Ich habe auch schon fast alles hinbekommen:
Der Client sucht den Server, findet ihn und baut eine Verbindung auf, dann werden Daten gesendet...
das wars!

Normalerweise soll nun eine Reaktion kommen, die kommt aber nie an. Ich habe meinem Router die neuen Portregeln gegeben, die Firewall auf dem Linux-System eingerichtet und es nur soweit hin bekommen, dass sich das Clientprogramm mit dem Server verbindet, dieser aber nichts zurücksenden kann.

Gibt es dafür noch mehr einzustellen in der Firewall???
Ein Webserver läuft auch auf der Maschine und ist aus dem Internet erreichbar. Anhand der Einstellungen habe ich auch die Firewall für dieses Programm eingereichtet.

Gruß Scoty

Verfasst: 17.09.2008 16:56
von Thalius
Also wenn du verbinden kannst dann ists mit der Firewall normalerweise ok.

ABER ich tippe jetzt mal ganz einfach spontan drauf dass du nicht lange genug auf daten wartest bis diese auch tatsächlich übermittlet worden sind !

Sprich: Wenn du ein "Paket" sendest muss dieses nicht unbedingt in einem Stück bei deinem server oder client ankommen. Sprich jedes empfangene byte vom socket in einen buffer schreiben bis das paket komplett ist und DANN deinen Buffer zusammenbauen und abarbeiten.

Benutzt du die standard PB Data events und wartest auf einen solchen ?

Cheers, Thalius

Re: Server / Client

Verfasst: 17.09.2008 16:57
von Kiffi
@scoty: funktionieren denn bei Dir die Server-/Client-Beispielcodes, die in
der PB-Hilfe vorhanden sind?

Grüße ... Kiffi

Verfasst: 17.09.2008 17:08
von scoty
Ich benutze die Standardevents und warte, so denke, ich bei über 5 Minuten lange genug.

Wo liegt denn ein Problem mit den Standardevents?

Die Beispiele habe ich noch nicht getestet.

Verfasst: 17.09.2008 17:15
von Kiffi
scoty hat geschrieben:Die Beispiele habe ich noch nicht getestet.
würde ich machen. Damit kannst Du ermitteln, ob der Fehler in Deinem
Code oder in Deiner Konfiguration zu suchen ist. ;-)

Grüße ... Kiffi

Verfasst: 17.09.2008 17:19
von scoty
Ich habe immer noch nicht das Beispiel getestet, aber ich gebe nun den String in die Konsole aus, der empfangen werden sollte.
Ich habe mich mit Putty mit meinem Server(Rechner) verbunden. Da wollte ich nun sehen, was der Server(Software) an Daten empfängt.

Der Datenmüll verursacht sogar ein umbenennen des Putty-Fensters!!!

Liegt das an String Windows != String Linux??????????????

Verfasst: 17.09.2008 17:46
von ts-soft
scoty hat geschrieben:Liegt das an String Windows != String Linux??????????????
Das liegt an Deinem Code, den bisher keiner gesehen hat. Strings können
ja nur als Data gelesen werden, nicht als String, also hast Du auch für die
richtige Aufbereitung zu sorgen. Sendest Du die länge? Wartest Du ab, bis
die entsprechende Anzahl Zeichen (Bytes) da ist? Soll ich die Glaskugel
rausholen?

Gruß
Thomas

Verfasst: 17.09.2008 18:40
von scoty
Auf der Windowsseite sende ich den String mit SendNetworkString().

Auf der Linuxseite empfange ich die Daten mit receiveNetworkData().

Dann kommt PeekS()

Da diesr Befehl bis zu einem Nullzeichen liest, habe natürlich keine Länge mit übertragen. Da wollte ich es mir einfach machen und beim Senden auf SendNetworkString() zurückgreifen.

[/code]

Verfasst: 17.09.2008 18:50
von ts-soft
> Da diesr Befehl bis zu einem Nullzeichen liest
Es wird aber kein Nullzeichen gesendet von SendNetworkString, Du hast
also einen Buffer anzulegen, der mindestens 1 Char grösser als der zu
erwartende String ist!
Besser wäre es, Du machst Dir ein kleines Protokoll für Deine Zwecke, wo
Du länge usw. bestimmst. Es sollten hier eigentlich genug Beispiele zu finden
sein, ansonsten wirste nicht drumrum kommen einen Code zu posten, wo
dieser Fehler auftritt.

Verfasst: 17.09.2008 21:25
von scoty
Aha!

Unter Windows hatte es geklappt, dann gehe ich jetzt mal davon aus, dass bei AllocateMemory() unter windows der Speicher mit Nullen initialisiert wird und es darum geklappt hat. Unter Linux ist es dann so, dass nichts initialisiert wird???

Das wer ich jetzt mal untersuchen und mich dann nochmal melden.