tcpip sockets
Petr Jiricek
jirpe na gdt.cz
Čtvrtek Červen 3 16:12:22 CEST 1999
Jiří Štěpánek wrote:
>
> mam redhat 5.1 a snazim se programovat tcpip aplikaci (chat) ve freepascalu (freepascal.sk). je tam celkem dobry socket-unit, ale nemam k nemu kompletni dokumentaci. setkal jsem se tam s recordtypem tinetsockaddr (popis viz nize). potreboval bych prevest hostname/ip-adresu a cislo portu do promenne tohoto typu (v pascalu, klidne i v C/C++). dekuji
>
> TInetSockAddr = packed record
> family:word;
> port:word;
> addr:cardinal;
> pad:array[1..8] of byte;
> end;
>
Mohu poslouzit pouze C
struct sockaddr_in {
short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
struktura 'in_addr' neni jineho, nez 4 byty obsahujici adresu. Struktura
'sockaddr_in' je jen redefinice pro 'sockaddr' definovanou jako short
adresni rodina a 14 bytu s adresou platnou v prislusne adresni rodine.
pripojeni na 10.1.1.127:21
struct sockaddr_in adr;
char *pt;
SOCKET s;
s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
memset ((void *) &adr, 0 sizeof(struct sockaddr));
adr.sin_family = AF_INET; // = 2
pt = (char *) &adr.sin_port;
*pt++ = 0; // horni byte portu
*pt++ = 21; // spodni, v tomto pripade FTP
*pt++ = 10; // prve cislo adresy
*pt++ = 1;
*pt++ = 1;
*pt++ = 127; // posledni cislo adresy
connect (s, &adr, sizeof(struct sockaddr));
--
Petr Jiricek <jirpe na gdt.cz>
Další informace o konferenci Linux