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