Views
4 months ago

Dhoto-JaringanKomputer1 (1)

} Listing program

} Listing program talker: /* ** talker.c - a datagram "client" demo */ #include #include #include #include #include #include #include #include #include #include #define MYPORT 4950 // the port users will be connecting to int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in their_addr; // connector’s address information struct hostent *he; int numbytes; if (argc != 3) { fprintf(stderr,"usage: talker hostname message\n"); exit(1); } if ((he=gethostbyname(argv[1])) == NULL) { // get the host info perror("gethostbyname"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } their_addr.sin_family = AF_INET; // host byte order their_addr.sin_port = htons(MYPORT); // short, network byte order their_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(their_addr.sin_zero), ’\0’, 8); // zero the rest of the struct if ((numbytes=sendto(sockfd, argv[2], strlen(argv[2]), 0,(struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == -1) { perror("sendto"); exit(1); } printf("sent %d bytes to %s\n", numbytes, inet_ntoa(their_addr.sin_addr)); } close(sockfd); 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 Suatu aplikasi server dapat menerima paket data secara bersamaan, untuk itu perlu dilakukan pelepasan suatu pembatas atau yang disebut non-blocking. Sehingga server bisa menerima data secara bersamaan. 84

Pada initialisasi socket(), socket secara awal memiliki nilai awal blocking. Untuk membuat mejadi bersifat non-blocking dilakukan dengan cara memanggil fungsi fcntl(). Hal ini dapat dilihat pada contoh berikut : #include #include . . sockfd = socket(AF_INET, SOCK_STREAM, 0); fcntl(sockfd, F_SETFL, O_NONBLOCK); . . 8.2.4.2 select() – Synchronous I/O Multiplexing Dengan fungsi select, aplikasi akan dapat memilah dan memroses data pada waktu yang bersamaan. Contoh penggunaan select() #include #include #include int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); Untuk memperjelas berikut adalah contoh program dimana akan menunggu dalam 2.5 detik apakah ada data yang masuk dari inputan keyboard. /* ** select.c - a select() demo */ #include #include #include #include #define STDIN 0 // file descriptor for standard input int main(void) { struct timeval tv; fd_set readfds; tv.tv_sec = 2; tv.tv_usec = 500000; FD_ZERO(&readfds); FD_SET(STDIN, &readfds); // don’t care about writefds and exceptfds: select(STDIN+1, &readfds, NULL, NULL, &tv); if (FD_ISSET(STDIN, &readfds)) printf("A key was pressed!\n"); else printf("Timed out.\n"); } return 0; Contoh penggunaan select() pada alikasi multiperson chat server /* ** selectserver.c - a cheezy multiperson chat server */ #include #include #include #include 85

| 1
!1
Fisika(1)
ISL201105_samoa_dark-1 copy.eps - Islands
Penglibatan & Sumbangan Malaysia 1
Administrasi Server(1)
Let’s Play • 1
1. RINGKASAN EKSEKUTIF