implementazione di un client
play

Implementazione di un client creazione socket connessione Dobbiamo - PDF document

Implementazione di un client creazione socket connessione Dobbiamo andare a costruire un programma scambio dati in C che richiede un servizio chiusura canale socket() socket() SOCK_DGRAM SOCK_STREAM /etc/protocols SOCK_RAW


  1. Implementazione di un client creazione socket connessione Dobbiamo andare a costruire un programma scambio dati in C che richiede un servizio chiusura canale socket() socket() SOCK_DGRAM SOCK_STREAM “/etc/protocols” SOCK_RAW SOCK_SEQPACKET Connect() #include <sys/socket.h> read()/write() int s; s = socket (domain, type, protocol) AF_UNIX close() AF_INET AF_NS 1

  2. # # Internet protocols socket() # # $FreeBSD: src/etc/protocols,v 1.13.2.1 2000/09/24 11:26:39 asm odai Exp $ # from: @(#)protocols 5.1 (Berkeley) 4/17/89 ? # # See also http://www.isi.edu/in-notes/iana/assignments/protocol -numbers # ip 0 IP # internet protocol, pseudo protocol number icmp 1 ICMP # internet control message protocol int s; igmp 2 IGMP # internet group management protocol ggp 3 GGP # gateway-gateway protocol s = socket(AF_INET, SOCK_STREAM, 0); ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'') st2 5 ST2 # ST2 datagram mode (RFC 1819) If ( s < 0 ) { tcp 6 TCP # transmission control protocol cbt 7 CBT # CBT, Tony Ballardie <A.Ballardie@cs.ucl.ac.uk> egp 8 EGP # exterior gateway protocol perror("socket() "); nvp 11 NVP-II # Network Voice Protocol pup 12 PUP # PARC universal packet protocol exit(1); argus 13 ARGUS # ARGUS emcon 14 EMCON # EMCON } xnet 15 XNET # Cross Net Debugger chaos 16 CHAOS # Chaos udp 17 UDP # user datagram protocol ... getprotobyname() int s, protocol_number; struct protoent *protocol_entry; protocol_entry = getprotobyname("tcp"); If ( protocol_entry == NULL ) { perror("getprotobyname() "); exit(1); #include <sys/socket.h> } protocol_number = protocol_entry -> p_proto; struct protoent *p ; s = socket(AF_INET, SOCK_STREAM, protocol_number); if ( s < 0 ) { p = getprotobyname (“name”) perror("socket() "); exit(2); } 2

  3. connect() struct sockaddr_un struct sockaddr_in sizeof(addr) struct sockaddr_un sun_family #include <sys/socket.h> Dominio int error; sun_path error = connect(socket, addr, len); Locazione della socket nel file system socket() struct sockaddr_in hton / ntoh sin_family Host -> network Short (16 bit) htons(int) Dominio Long (32 bit) htonl(int) sin_port Porta (16 bit indirizzo transport) Network - > host sin_addr Short (16 bit) ntohs(int) Indirizzo IP Long (32 bit) ntohl(int) 3

  4. gethostbyname() gethostbyname() struct hostent bcopy() h_addr #include <sys/socket.h> struct in_addr htons(porta) struct hostent *server; server = gethostbyname(“name”); assegnamento struct sockaddr_in struct hosten t *server_host; inet_addr() struct in_addr server_host_addr; struct sockaddr_in server_addr; server_host = gethostbyname(“ www.dsi.unimi.it "); if (!server_host) { perror("gethostbyname() "); exit(1); } #include <sys/socket.h> bcopy(server_host->h_addr, &server_host_addr, server->h_length); unsigned long addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(12345); addr = inet_addr(“xxx.xxx.xxx.xxx”); bcopy(&server_host_addr, &server_addr.sin_addr, sizeof(server_host_addr)); if(connect(s, &server_addr, sizeof(server_addr)==-1) { server_addr.sin_addr.s_addr = addr perror("connect() "); exit(1); } 4

  5. getservbyname() struct servent *service_entry; int service_port; Get SERVICE by name service_entry = getservbyname("chargen", "tcp"); if(!service_entry) { perror("getservbyname() "); /etc/services exit(2); } service_port = service_entry.s_port; struct servent *service; service = getservbyname(“service”, proto) # # Network services, Internet style systat 11/tcp users #Active Users # systat 11/udp users #Active Users # daytime 13/tcp # $FreeBSD: src/etc/services,v 1.62.2.3 2000/10/05 07:37:37 daytime 13/udp # sheldonh Exp $ qotd 17/tcp quote #Quote of the Day # From: @(#)services 5.8 (Berkeley) 5/9/91 qotd 17/udp quote #Quote of the Day # chargen 19/tcp ttytst #Character Generator # WELL KNOWN PORT NUMBERS chargen 19/udp ttytst #Character Generator # ftp-data 20/tcp #File Transfer [Default Data] rtmp 1/ddp #Routing Table Maintenance Protocol ftp-data 20/udp #File Transfer [Default Data] tcpmux 1/tcp #TCP Port Service Multiplexer ftp 21/tcp #File Transfer [Control] tcpmux 1/udp #TCP Port Service Multiplexer ftp 21/udp #File Transfer [Control] nbp 2/ddp #Name Binding Protocol ssh 22/tcp #Secure Shell Login echo 4/ddp #AppleTalk Echo Protocol ssh 22/udp #Secure Shell Login echo 7/tcp telnet 23/tcp echo 7/udp telnet 23/udp discard 9/tcp sink null ... discard 9/udp sink null 5

  6. read / write close() int num_bytes; num_bytes = read(socket, buffer, size); int error; error = close(socket); int num_bytes; num_bytes = write(socket, buffer, size); 6

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend