UDP (User Datagram Protocol) SOCKET PROGRAMMING
UDP menyediakan layanan transfer yang tidak dapat diandalkan dengan mengirimkan paket datagrams per kelompok antar server dan client tanpa pemeriksaan.
Keuntungan UDP : -
Simple, tidak menyediakan utility untuk memastikan koneksi.
-
Fleksibel, dapat mengirim pesan ke beberapa penerima pesan meskipun dengan adanya operasi lain yang sedang berjalan.
-
Efisien, paket yang dikirim untuk koneksi data hanya sedikit.
-
Cepat, data dapat langsung dikirim tanpa pemeriksaan koneksi.
-
Kemampuan Broadcast, dapat mengirim ke beberapa penerima sekaligus dalam sekali kirim.
Kelemahan UDP : -
Banyak data yang hilang.
-
Banyak kesalahan pengiriman.
Fungsi socket protocol UDP 1.
int sd = socket(AF_INET, SOCK_DGRAM, 0); berfungsi untuk membuat socket dan parameter family yang digunakan adalah AF_INET yaitu internet protocol dan socket yang digunakan adalah SOCK_DGRAM yang berfungsi untuk membuka socket pada UDP.
2.
bind ( ), Digunakan untuk mengatur port pada server
3.
Sendto( ), Syntax ini digunakan untuk mengirimkan data pada protocol UDP dengan membuka port dan alamat IP tertentu.
4.
Recvfrom( ), Syntax ini digunakan untuk menerima data pada protocol UDP dengan port dan alamat IP yang sama pada saat dikirimkan dengan syntax Sendto ( )
5.
htonl(), meng-convert unsigned integer ke network byte order.
6.
inet_ntoa(), ntoa singkatan 'network to ascii', nilai return-nya berupa string dari alamat yang dilewatkan.
7.
inet_addr(), meng-convert string menjadi network byte order.
8.
connect(), digunakan pada pihak client, untuk mengadakan koneksi ke server.
9.
listen(), menunggu koneksi socket.
10. accept(), menerima koneksi socket. 11. close() dan shutdown(), digunakan untuk menutup atau mengakhiri koneksi.
Pemrograman Jaringan – UDP Socket Programming
1
Diagram Alur Socket Programming dengan UDP
Pemrograman Jaringan – UDP Socket Programming
2
Program Socket dengan UDP Listing UDPServer.c : /* ** UDPserver.c - UDP server untuk socket programming */ #include <stdio.h> #include <stdlib.h> #include
#include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include #include <arpa/inet.h> #define MYPORT 4950 // port 4950 akan digunakan untuk koneksi #define MAXBUFLEN 100 int main(void){ int sockfd; struct sockaddr_in my_addr; // informasi alamat lokal struct sockaddr_in their_addr; // informasi koneksi alamat int addr_len, numbytes; char buf[MAXBUFLEN]; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } my_addr.sin_family = AF_INET; // input untuk alamat host my_addr.sin_port = htons(MYPORT); // port yang akan dilakukan koneksi my_addr.sin_addr.s_addr = INADDR_ANY; // Secara otomatis akan diisi dengan IP local memset(&(my_addr.sin_zero), ’\0’, 8); // zero digunakan untuk mengembalikan struct if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { perror("bind"); exit(1); } addr_len = sizeof(struct sockaddr); if ((numbytes=recvfrom(sockfd,buf, MAXBUFLEN-1, 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) { perror("recvfrom"); exit(1); } printf("got packet from %s\n",inet_ntoa(their_addr.sin_addr)); printf("packet is %d bytes long\n",numbytes); buf[numbytes] = ’\0’; printf("packet contains \"%s\"\n",buf); close(sockfd); return 0; }
Pemrograman Jaringan – UDP Socket Programming
3
Listing UDPClient.c : ** UDPclient.c - UDP client untuk socket programming */ #include <stdio.h> #include <stdlib.h> #include #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include #include <arpa/inet.h> #include #define MYPORT 4950 // port 4950 akan digunakan untuk koneksi int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in their_addr; // informasi koneksi alamat 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; // input untuk alamat host their_addr.sin_port = htons(MYPORT); // port yang akan dilakukan koneksi their_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(their_addr.sin_zero), ’\0’, 8); // zero digunakan untuk mengembalikan 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;
Pemrograman Jaringan – UDP Socket Programming
4
}
Pemrograman Jaringan – UDP Socket Programming
5