Autor Beitrag
Nothilvien
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Do 13.11.08 01:11 
Also ich habe ein Programm das über die TSeverSocket mit ReceiveText daten bekommt, jedoch wen ich diese wieder sende
mit SendText oder SendBuf klappt das nicht, bzw es geht schon, nur er sendet n haufen wirres zeug :S

Selbst wenn ich:

ausblenden Delphi-Quelltext
1:
2:
raw_data := ReceiveText;
Sendtext(raw_data)


Also auch wenn ich das was er bekommt wieder wegschicke, sended er komisches zeug :S

Wie auf dem bild zu sehen, das was mein Programm sended sollte eigentlich genauso aussehen, wie das was es empfaengt..
tuts aber nicht, ich nutze DelphiCodegear2009, evtl stimmt da etwas nicht mit?

oder sollte ich lieber versuchen das ganze per WinsockAPI zu realisieren? (aber baut da nicht sowieso alles drauf auf?)
oder was koennt man mir empfehlen? mit indy konnte ich mich noch nicht so richtig anfreunden..hm eventuell probiere ich das mal.

Aber das mit dem TSeverSocket verstehe ich nicht.
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.11.08 05:19 
Ich kann deine beiden Zeilen mal ausprobieren, aber einfacher wäre es, wenn du einfach ein kleines Testprogramm anhängst. Dann kann ich viel schneller sagen was da schief läuft, vor allem weil der Fehler ja vermutlich nicht in diesen Zeilen liegt.
Nothilvien Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Do 13.11.08 16:18 
Ich habe zum vergleich 2 memo felder, dieverarbeiteten daten sehen so asu wie die angekommen, nachdem sie alle funktionen durchlaufen haben, auch wenn ich das was ankommt direkt wieder raussende kommt es nciht richtig an.
es scheint so als waere es immer ca.~ um die haelfte kleiner was er rausschickt.

der client ist nicht in delphi und was fuer komponenten er beutzt weis ich nicht, jedenfalls moechte ich ersteinmal erreich das ich genau das zurueck schciken kann, was ankommt :S

project angehaengt
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.11.08 16:25 
Ok, ich schaus mir an, aber erst nachher, ich muss erstmal nochmal was erledigen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.11.08 23:40 
Also ich verstehe nicht so ganz was da eigentlich dabei herauskommen soll, aber du halbierst ja auch direkt die Daten. Und zwar an dieser Stelle:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
WideStringToBinArray(raw_data,packet_recive);   //wandele das empfangene in einen binären array

for j := 0 to length(raw_data)-1 do    //solange wie was da ist..
begin
SetLength(packet_recive, length(raw_data)-1);     //array lenge festlegen
Das binäre Array ist doppelt so lang wie der String, denn ein WideChar (Unicode) hat 2 Byte. Die werden also auf zwei Plätze im Array verteilt.
Damit halbierst du praktisch die Daten indem du die Länge des Arrays (je 2 Byte pro Buchstabe) auf die Anzahl der Buchstaben setzt.

Was ich mich aber frage: Warum setzt du die Länge mehrfach im Array?
Nothilvien Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Fr 14.11.08 01:20 
ich habe nicht daran gedacht, das das setlength innerhalb der schleife war, ich habe es einfach vor der 1. benutzung des arrays geschrieben. weil irgendwie das programm abgestuerzt ist, als ich es nicht festgelegt hatte.

was ich nicht verstehe, trotz des set lenght wird wen ich es auf einer messagebox ausgebe, die hexwerte so angezeigt wie bei dem packetsniffer (also der zeigt den datenverkehr zwischen meinen programm und den clienten an)

Aber wie gesagt wenn ich
ausblenden Delphi-Quelltext
1:
SendText(raw_data)					

also das was erbekommt direkt weider losschicke hat es zwar die passende groesse, aber das packet ist trotzdem nciht das gleiche.

Kann der fehler eventuell schon beim einlesen passieren?
evtl sit widestring nicht das richtige um mit den daten zu arbeiten.

Es soll ein kleiner server fuer ein spiel sein, der einfach auf bestimmte datenpackete reagiert und vorgefaertigte zurückschickt.

dazu brauche ich ersteinma die funktion um das was ankommt als hex darzustellen, oder halt etwas womit man arbeiten kann.
den wen ich das anzeigen lasse, als string wird es nur als komische symbole angezeigt :S

aber wen ich es durch die bintohex funktion laufen lasse, zeigt er mir den hex code so an wie in meinen sniffer, damit wollte ich dan arbeiten. damit ich spaeter aber auch packete senden kann, die vom clienten aktzeptiert werden muess das hexa zeug ja auch wieder richtig zurueck gewandelt werden, damit der client es aktzeptiert.

also denke ich das man das was ankommt einfach als binäre zeichen doer so ewtas behandeln solte und es sozusagen byte fuer byte auslesen muss.

das macht ja bytetostrin, er wandelt die bytes ja passend als hexa um und packt sie in einen string, denke ich zumindest. naja und damit das ganze halt auch aktzeptert wird die umkehr funktionen.

aber ich gehe mal davon aus das die funktionen egentlich funktionieren sollten, da sie mir das empfangene packet als hex anzeigen, genauso wie im sniffer.

da aber das packet selbst so komisch sit wen ich es direkt nach empfang mit der gleichen variable zurueckschicke, stimmt evetuell ewtas mit der variable oder dem sendenempfangen des sockets nciht :S wuerde ich mal behaupten.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 14.11.08 03:31 
Also ich glaube WideStringToBinArray brauchst du dann gar nicht, diese Funktion ist dafür gedacht einen Unicodestring in ein binäres Array umzuwandeln. Wenn du einfach nur alles empfangene anzeigen willst oder so, dann brauchst du das doch gar nicht in der Form, das was da im Sniffer zu sehen ist ist doch gar kein Unicode ;-).

Wie willst du das denn dargestellt haben? So wie im Sniffer links?
Nothilvien Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Fr 14.11.08 08:47 
naja am besten so wie rechts und links, also auch schon den plain text (nothilvien.test) das waere z.b. ein login packet. und auch noch als hexa (so wie links) den manche sachen kann er ja als text nicht darstellen 8da zeigt er dan einfach einen punkt an..?) die aber sowohl auch an bedeutung haben koennen, z.b. muss ich ja auch herausfinden welcher heacode den nick & welcher das pw einleitet.

und das was ankomt sind aj eigentlich nur nullen und einsen..denke ich zumindest :S
aber wen ich das direkt anzeigen lasse, sehe ich nur chinesische symbole.

evtl muss ich das recive.text als integer speichern?

ich lerne halt mehr an der ganzen sache und experimentiere rum, daher ist der code wohl auch nciht immer der logischste :P
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 14.11.08 13:28 
Ich schreib mal nen kleines Beispiel, ich poste das dann nachher.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 14.11.08 15:41 
So, ich hab das mal in den Anhang gepackt, das Ding macht nix weiter als den empfangenen Text und die dazugehörige Hexadetimaldarstellung anzuzeigen und den Text zurückzuschicken. Der Client zeigt dann ebenfalls beide Versionen an.
// EDIT:
kompilierte Versionen aus Platzgründen aus dem Archiv entfernt
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von jaenicke am Fr 14.11.08 16:42, insgesamt 1-mal bearbeitet
Nothilvien Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Fr 14.11.08 16:00 
hallo, ich vermute das etwas mit meinen sockets nicht stimmt :C

das senden ist anders, als das was er eigentlich empfaengt.

wenn ich mit dem clienten "hallo!" sende,
zeigt er auf den server memo feld komische symbole an und wen der server es wieder zurück schickt,
veraendert sich das ganze nochmal.

also bei jeder empfangen/senden aktion, veraendert sich das datenpacket, selbst bei delphi zu delphi client/server.

das beispiel ist wunderbar, vielen dank fuer deine mühen!!

evtl muss ich aber eine neuere version der Tserverscoket clase finden, oder (etwas anderes benutzen) was meinst du?

//EDIT;

okay, ich habe dein beispiel nocheinmal heruntergeladen, dann habe ich es aber nciht neu erzeugt mit meinem delphi!
sondern einfach direkt deine server&client.exe ausgefuehrt.
UND das ganze funktioniert!!

Also gehe ich mal ganz satrk davon aus das das problem irgendwo bei meiner socketclass liegt!
ich werde mal etwas googlen und versuchen ewtas herauszufinden.
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 14.11.08 16:09 
Ah, Verd***, ich habe vergessen, dass du Delphi 2009 hast und da Strings ja immer 2 Bytes pro Buchstabe haben als ich das Beispiel geschrieben habe. Das könnte daran liegen. Moment.

// EDIT:
Ich hab mal Delphi 2009 installiert und es getestet. Da stimmt etwas nicht mit der Implementierung. Dies bestätigte sich dann als ich einen Blick ins Forum bei Codegear geworfen habe...
forums.codegear.com/...jspa?messageID=40689
Funktionierende Version im Anhang...
Einloggen, um Attachments anzusehen!
Nothilvien Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Fr 14.11.08 16:49 
alles klar ich werd alles mal durchchecken =)!!!
super danke ^.^!!!