Contoh Client Berbasis STREAM Socket dengan DATAGRAM

printfserver: got connection from s\n, inet_ntoatheir_addr.sin_addr; if fork { this is the child process closesockfd; child doesn’t need the listener if sendnew_fd, Hello, world\n, 14, 0 == -1 perrorsend; closenew_fd; exit0; } closenew_fd; parent doesn’t need this } return 0; } Untuk mencoba program server tersebut jalankan: telnet server 3490

8.2.3.2. Contoh Client Berbasis STREAM

client.c - a stream socket client demo include stdio.h include stdlib.h include unistd.h include errno.h include string.h include netdb.h include systypes.h include netinetin.h include syssocket.h define PORT 3490 the port client will be connecting to define MAXDATASIZE 100 max number of bytes we can get at once int mainint argc, char argv[] { int sockfd, numbytes; char buf[MAXDATASIZE]; struct hostent he; struct sockaddr_in their_addr; connector’s address information if argc = 2 { fprintfstderr,usage: client hostname\n; exit1; } if he=gethostbynameargv[1] == NULL { get the host info perrorgethostbyname; exit1; } if sockfd = socketAF_INET, SOCK_STREAM, 0 == -1 { perrorsocket; exit1; } their_addr.sin_family = AF_INET; host byte order their_addr.sin_port = htonsPORT; short, network byte order their_addr.sin_addr = struct in_addr he-h_addr; memsettheir_addr.sin_zero, ’\0’, 8; zero the rest of the struct if connectsockfd, struct sockaddr their_addr,sizeofstruct sockaddr == -1 { perrorconnect; exit1; } if numbytes=recvsockfd, buf, MAXDATASIZE-1, 0 == -1 { perrorrecv; exit1; } buf[numbytes] = ’\0’; printfReceived: s,buf; closesockfd; return 0; } Program ini mencari server dengan port 3490 dan menerima string dari server dan menampilkan ke layar.

8.2.3.3. Socket dengan DATAGRAM

Program listener akan bersiap pada sebuah mesin dan akan menunggu paket yang menuju ke port 4950. Program talker akan mengirim paket menuju ke port tersebut. Listing program listernet : listener.c - a datagram sockets server demo include stdio.h include stdlib.h include unistd.h include errno.h include string.h include systypes.h include syssocket.h include netinetin.h include arpainet.h define MYPORT 4950 the port users will be connecting to define MAXBUFLEN 100 int mainvoid { int sockfd; struct sockaddr_in my_addr; my address information struct sockaddr_in their_addr; connector’s address information int addr_len, numbytes; char buf[MAXBUFLEN]; if sockfd = socketAF_INET, SOCK_DGRAM, 0 == -1 { perrorsocket; exit1; } my_addr.sin_family = AF_INET; host byte order my_addr.sin_port = htonsMYPORT; short, network byte order my_addr.sin_addr.s_addr = INADDR_ANY; automatically fill with my IP memsetmy_addr.sin_zero, ’\0’, 8; zero the rest of the struct if bindsockfd, struct sockaddr my_addr,sizeofstruct sockaddr == -1 { perrorbind; exit1; } addr_len = sizeofstruct sockaddr; if numbytes=recvfromsockfd,buf, MAXBUFLEN-1, 0,struct sockaddr their_addr, addr_len == -1 { perrorrecvfrom; exit1; } printfgot packet from s\n,inet_ntoatheir_addr.sin_addr; printfpacket is d bytes long\n,numbytes; buf[numbytes] = ’\0’; printfpacket contains \s\\n,buf; closesockfd; return 0; } Listing program talker: talker.c - a datagram client demo include stdio.h include stdlib.h include unistd.h include errno.h include string.h include systypes.h include syssocket.h include netinetin.h include arpainet.h include netdb.h define MYPORT 4950 the port users will be connecting to int mainint argc, char argv[] { int sockfd; struct sockaddr_in their_addr; connector’s address information struct hostent he; int numbytes; if argc = 3 { fprintfstderr,usage: talker hostname message\n; exit1; } if he=gethostbynameargv[1] == NULL { get the host info perrorgethostbyname; exit1; } if sockfd = socketAF_INET, SOCK_DGRAM, 0 == -1 { perrorsocket; exit1; } their_addr.sin_family = AF_INET; host byte order their_addr.sin_port = htonsMYPORT; short, network byte order their_addr.sin_addr = struct in_addr he-h_addr; memsettheir_addr.sin_zero, ’\0’, 8; zero the rest of the struct if numbytes=sendtosockfd, argv[2], strlenargv[2], 0,struct sockaddr their_addr, sizeofstruct sockaddr == -1 { perrorsendto; exit1; } printfsent d bytes to s\n, numbytes, inet_ntoatheir_addr.sin_addr; closesockfd; return 0; } 8.2.4. Socket lanjutan Pada bagian ini dijelaskan tentang penggunaan beberapa fungsi yang dapat mendukung kerja dari program jaringan menggunakan pemrograman socket.

8.2.4.1. Blocking