Autor |
Beitrag |
schlumpf70
      
Beiträge: 21
|
Verfasst: Do 18.08.05 13:48
hallo folgendes prob hab paar zeilen code den ick in delphi benötige abe rnit weiss wie ick det umsetzen kann
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| unsigned char teil1[] = "\x00\x00\x00\x85\xFF\x53\x4D\x42\x72\x00\x00\x00\x00\x18\x53\xC8" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFE";
#define SET_PORTBIND_PORT(buf, port) \ *(unsigned short *)(((buf)+186)) = (port)
#ifdef _WIN32 WSADATA wsa; WSAStartup(MAKEWORD(2,0), &wsa); #endif
if ((he = gethostbyname(argv[1])) == NULL) { printf("[-] Unable to resolve %s\n", argv[1]); exit(0); }
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("[-] socket failed\n"); exit(0); }
addr.sin_family = AF_INET; addr.sin_port = htons(445); addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(addr.sin_zero), '\0', 8);
if (connect(sockfd, (struct sockaddr *)&addr, sizeof(struct sockaddr)) < 0) { printf("\n[-] connect failed\n"); exit(0); }
if (send(sockfd, test1, sizeof(test1)-1, 0) < 0) { printf("\n[-] send failed\n"); exit(0); }
len = recv(sockfd, recvbuf, 4096, 0); if ((len <= 10) || (recvbuf[9] != 0)) { printf("\n[-] failed\n"); exit(0); }
recv(sockfd, recvbuf, 4096, 0); |
bin für jede hilfe dankbar
Moderiert von Motzi: Code-Tags hinzugefügt.
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Do 18.08.05 13:56
Woher weisst du, dass du genau diesen Code in Delphi benötigst?
Warscheinlich benötigst du vielmehr die Funktionalität, die darin steckt. Wenn du aber nicht weisst, was der Code tut, woher weisst du, dass du ihn brauchst?
Wenn du weisst, was er tut, dann sollte es ja möglich sein, das ganze in Delphi selbst zu bauen. Wenn dabei spezifische Fragen aufkommen, kann man dir sicherlich auch gerne helfen.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
schlumpf70 
      
Beiträge: 21
|
Verfasst: Do 18.08.05 14:03
hmmm also es geht um ne verbindung zu nen server auf nen pestimmten port und für die anmelödung muss er diese zeilen senden, da ick von c++ so gut wie keine ahnung hab aber ein programm aufsetzen möchte in delphi habe ich gedacht ick frag ma hier *denk
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Do 18.08.05 14:10
Geht doch
Beliebt für Netzwerkgeschichten mit Delphi sind allgemein die Indy-Komponeten, es taugen aber auch jegliche anderen Socket-Komponenten. Welche bei deiner Delphi-Version dabei sind, wirst du einfach nachsehen müssen.
Als nächstes schau dir die Postings im Netzwerk-Bereich des DF an, da wirst du bestimmt fündig, wie du mittels der Komponenten ne Verbindung zum Server aufbaust. Oder nimm die online-Hilfe, die reicht meistens aus.
Ich halte es generell für keine gute Idee, ein Stück Code aus Sprache a nach Sprache b zu 'übersetzen', das geht oft genug in die Hose.
Da du ja weisst, was du tun willst, wirf den C++-Code ( bis auf die String-Konstante am Anfang ) weg und bau den Kram in Delphi neu.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
schlumpf70 
      
Beiträge: 21
|
Verfasst: Do 18.08.05 14:19
jo nur kann ick diese string konstanten als string senden oder baut c++ das um ? das is eigentlich das wichtigste wei lsonnst würde icks denk ick hinkriegen nur die frage muss ich binden ? also wen nich verbunden bin also nach connect die ip und port vom server an meine componente z.b. indi binden ?
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Do 18.08.05 14:24
Der String besteht aus ner Reihe Hex-Ziffern ( \x steht für Hex, wenn ich nicht irre ). Was genau der Server da haben will, musst du bei demjenigen erfragen, der den Server gebaut hat. Im Zweifel halt verschiedenes ausprobieren.
Nen bind-aufruf brauchst du bei nem Client idR nicht. Versuchs erstmal ohne.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
Grendel
      
Beiträge: 443
Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
|
Verfasst: Do 18.08.05 14:38
Selam!
Du kannst o.g. Code nahezu 1 zu 1 übernehmen:
ungetestet:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| uses winsock;
[...]
var test1 : String; wsa : WSADATA; he : phostent; sockfd : integer; addr : TSockAddrIn; len : Integer; recvbuf: String; begin test1 := 'dingens';
WSAStartup(MAKEWORD(2,0), wsa);
he := gethostbyname(''); sockfd := socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family := AF_INET; addr.sin_port := htons(445); addr.sin_addr := in_addr(he.h_addr); FillChar(addr.sin_zero, 8, #0);
if connect(sockfd, addr, sizeof(addr)) < 0 then Writeln('connect faild');
if send(sockfd, test1, Length(test1) - 1, 0) < 0 then WriteLn('send faild');
len := recv(sockfd, recvbuf, 4096, 0); if (len <= 10) or (recvbuf[9] <> #0) then Writeln('faild'); WSACleanup(); |
Bis neulich ...
|
|
|