Fungsi close dan shutdown digunakan untuk menutup koneksi setelah melakukan pertukaran data. Shutdown digunakan apabila diinginkan suatu kondisi tertentu, variabel
tersebut ditambahkan pada variable how. Varibel tersebut mempunya nilai dan arti tertentu yaitu :
• 0 – Setelah ditutup, hanya diperbolehkan menerima • 1 – Setelah ditutup, hanya diperbolehkan mengirim
• 2 – Seteleh ditutup, menerima dan mengirim tidak diperbolehkan sama dengan close
8.2.2.9. getpeername
Penggunaan :
include syssocket.h int getpeernameint sockfd, struct sockaddr addr, int addrlen;
Fungsi getpeername digunakan untuk mengetahui informasi tentang tujuan.
8.2.2.10. gethostname
Penggunaan :
include unistd.h int gethostnamechar hostname, size_t size;
Fungsi gethostname digunakan untuk mengetahui informasi tentang mesin jaringan kita.
8.2.2.11. DNS – Mengirim ke “whitehouse.gov”, Dijawab “198.137.240.92”
Penggunaan :
include netdb.h struct hostent gethostbynameconst char name;
Struktur hostent memiliki objek didalam antara lain :
struct hostent { char h_name;
char h_aliases; int h_addrtype;
int h_length; char h_addr_list;
}; define h_addr h_addr_list[0]
Dimana : • h_name – nama resmi dari suatu host
• h_aliases – NULL , nama alternatif dari suatu host • h_addrtype – type dari alamat, contoh AF_INET
• h_length – panjang dari data alamat IP • h_addr_list – ZERO, sekumpulan IP dengan nama tersebut
• h_addr – alamat pertama dari h_addr_list
Untuk mendapatkan hasil dari struktur hostent digunakan fungsi gethostbyname. Cara penggunaan dapat dilihat pada contoh program.
Contoh program :
getip.c - a hostname lookup demo include stdio.h
include stdlib.h include errno.h
include netdb.h include systypes.h
include syssocket.h include netinetin.h
include arpainet.h int mainint argc, char argv[]
{ struct hostent h;
if argc = 2 { error check the command line fprintfstderr,usage: getip address\n;
exit1; }
if h=gethostbynameargv[1] == NULL { get the host info herrorgethostbyname;
exit1; }
printfHost name : s\n, h-h_name; printfIP Address : s\n, inet_ntoastruct in_addr h-h_addr;
return 0; }
8.2.3.
Skenario penggunaan pemrograman socket
Pemrograman socket menggunakan sistem client-server, dimana proses client berbicara dengan proses server dan sebaliknya. Contoh, client dengan aplikasi telnet akan
menghubungi server yang menjalankan aplikasi telnetd.
Gambar 8.1 Client-Server
Diagram alir yang digunakan tampak pada
Gambar 8.2 Diagram Alir Program Berbasis Connection-oriented
Gambar 8.3 Diagram Alir Program Berbasis Connectionless-oriented
8.2.3.1. Contoh Server Berbasis STREAM
server.c - a stream socket 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
include syswait.h include signal.h
define MYPORT 3490 the port users will be connecting to define BACKLOG 10 how many pending connections queue will hold
void sigchld_handlerint s {
whilewaitNULL 0; }
int mainvoid {
int sockfd, new_fd; listen on sock_fd, new connection on new_fd struct sockaddr_in my_addr; my address information
struct sockaddr_in their_addr; connector’s address information int sin_size;
struct sigaction sa; int yes=1;
if sockfd = socketAF_INET, SOCK_STREAM, 0 == -1 { perrorsocket;
exit1; }
if setsockoptsockfd,SOL_SOCKET,SO_REUSEADDR,yes,sizeofint == -1 { perrorsetsockopt;
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;
} if listensockfd, BACKLOG == -1 {
perrorlisten; exit1;
} sa.sa_handler = sigchld_handler; reap all dead processes
sigemptysetsa.sa_mask; sa.sa_flags = SA_RESTART;
if sigactionSIGCHLD, sa, NULL == -1 { perrorsigaction;
exit1; }
while1 { main accept loop sin_size = sizeofstruct sockaddr_in;
if new_fd = acceptsockfd, struct sockaddr their_addr, sin_size == -1 {
perroraccept; continue;
}
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