Autor Beitrag
Fl4sh
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 19.08.05 20:42 
Hallo, ich habe folgendes Problem:

Ich bekomme von einem Programm direkte Informationen in Hex-Bytes, also soetwas: F0C33465B21C... usw...
Nun möchte ich die Daten empfangen, mit Socket.ReceiveText, dieser versucht jedoch die Bytes direkt in ASCII (oder unicode, oder was auch immer) umzuwandeln, damit ich eben den Text darstellen kann.

Ich will aber die empfangenen Bytes direkt in einen String speichern, wie kann ich das machen?

Im Code werden einige Bytes ausgetauscht und letztendlich sollen dann wieder die reinen bytes (also nicht per sendtext) zurückgeschickt werden.

ich dachte mit send und receivebuf geht das, aber irgendwie klappt das nicht, bzw. habe ich bisher nur gefunden wie man records mit send- und receivebuf übermittelt, aber keinen string.

Kann mir wer helfen? Danke
Fl4sh Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 19.08.05 22:05 
Hab jetzt mal was probiert, klappt leider nicht so ganz. :(
hab halt noch nie so netzwerk kram gemacht, also sorry, wenn ich das nich ganz so schnall.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.FormCreate(Sender: TObject);
var
server: TServerSocket;
client: TClientSocket;
send, receive: String;
begin
server := TServerSocket.create(self);
client := TClientSocket.Create(self);
server.port:=3000;
server.active := true;
client.Address := '127.0.0.1';
client.Port := 3000;
client.active := true;

send:='FF00C1B4';
client.Socket.SendBuf(send, sizeof(send));
server.socket.receivebuf(receive, sizeof(receive));
end;


Jetzt bekomme ich aber folgenden fehler:
Im Projekt Projekt1.exe ist eine Exception der Klasse ESocketError aufgetreten. Meldung: 'Windows Socket Fehler: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über ein Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde (10057), auf API 'recv''. Prozeß wurde angehalten...

und danach noch eine mit: "Asynchroner Socket-Fehler 10053"

Was mache ich falsch? :-/
worm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 135


D6 Prof
BeitragVerfasst: Mo 22.08.05 01:37 
Ein Blick in die Delphi-Hilfe zeigt folgendes: "Zur Entwurfszeit setzen Sie Active auf True, damit der Socket beim Start der Anwendung eine Verbindung öffnet. Zur Laufzeit verwenden Sie zum Öffnen und Schließen der Verbindung die Methoden Open und Close."
Also versuch's mal mit Open, dass wird beim Setzen des Active-Properties nämlich nicht automatisch ausgeführt (sondern umgekehrt).

Für die erste Frage erklär uns doch mal, um was für ein Programm es sich handelt, von dem Du Daten empfängst, und wie diese Daten übertragen werden ("Ich bekomme von einem Programm direkte Informationen" sagt wenig darüber aus).

_________________
In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 22.08.05 10:33 
Moin!

Zunächstmal:
user profile iconworm hat folgendes geschrieben:
Also versuch's mal mit Open, dass wird beim Setzen des Active-Properties nämlich nicht automatisch ausgeführt (sondern umgekehrt).

Das ist nicht korrekt, die Eigenschaft .Active zu Beschreiben ist gleichwertig zu .Open bzw. .Close! In der Hilfe steht das nur deshalb drin, weil man in der IDE schlecht auf .Open/.Close zugreifen können wird... :wink:

Jetzt zu dem "eigentlichen Problem":
user profile iconFl4sh hat folgendes geschrieben:
hab halt noch nie so netzwerk kram gemacht, also sorry, wenn ich das nich ganz so schnall.

Hmm, dann wäre wohl ein Tutorial oder die Beschäftigung mit einem Beispielprog (z.B. ein Chat; gibts ja genug von hier im Forum!) ganz sinnvoll, anstatt von uns zu erwarten, dass wir dir die Grundlagen beibringen... :? :roll:

user profile iconFl4sh hat folgendes geschrieben:
Was mache ich falsch? :-/

Ziemlich viel... :shock:
1. Du solltest die TClientSocket- und TServerSocket-Komponenten nicht direkt instanzieren, sondern besser in der IDE auf das Formular ziehen; das ist in deinem Stadium der "Netzwerkprogrammierung" sicherer. :wink:
2. Du kannst nicht einfach den Client "einschalten", du mußt warten, bis du eine Verbindung hast; dazu gibt es entsprechende Ereignisse (z.B. OnConnect); deshalb bekommst du die ganze Fehler.
3. Was du da senden willst (send:='FF00C1B4') und wie du so davon redest ("direkte Informationen in Hex-Bytes", "die reinen bytes") läßt mich vermuten, dass du nicht die leiseste Ahnung hast, wovon du da redest. :shock: :wink: Du solltest mal etwas mehr über Datentypen und Darstellungen (hexadezimal, dezimal, binär) in Erfahrung bringen, und wie diese auf einem Rechner verarbeitet/gespeichert werden. So wird das nix...

user profile iconworm hat folgendes geschrieben:
Für die erste Frage erklär uns doch mal, um was für ein Programm es sich handelt, von dem Du Daten empfängst, und wie diese Daten übertragen werden ("Ich bekomme von einem Programm direkte Informationen" sagt wenig darüber aus).

Dem kann ich nur uneingeschränkt zustimmen; deine Aussagen helfen nicht wirklich, das Problem zu erfassen. Folglich wird man dir nur sehr schwer helfen können, noch dazu, wo dir offensichtlich einige unersetzliche Grundlagen fehlen.

Ist nicht böse gemeint, nur ehrlich... :wink:

cu
Narses