Entwickler-Ecke
Internet / Netzwerk - Empfangene Bytes direkt in String speichern
Fl4sh - Fr 19.08.05 20:42
Titel: Empfangene Bytes direkt in String speichern
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 - 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.
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 - 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).
Narses - Mo 22.08.05 10:33
Moin!
Zunächstmal:
worm 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":
Fl4sh 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:
Fl4sh 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...
worm 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!