Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Pertemuan 3 ELEMENTARY TCP SOCKETS I Made Astawa

Presentasi serupa


Presentasi berjudul: "Pertemuan 3 ELEMENTARY TCP SOCKETS I Made Astawa"— Transcript presentasi:

1 Pertemuan 3 ELEMENTARY TCP SOCKETS I Made Astawa

2 2 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa dapat: menggunakan fungsi atau system call yang berhubungan dengan sockets pada Unix, Linux, untuk membuat program aplikasi Client Server

3 3 Outline Materi socket function connect function bind function listen function accept function read function write function Kasus : Merancang aplikasi Client – Server

4 4 ELEMENTARY TCP SOCKETS

5 5 TCP/IP

6 6 ELEMENTARY TCP SOCKETS Fungsi : socket() include int socket(int family, int type, int protocol); Fungsi socket akan mengembalikan non-negatip descriptor jika sukses, dan akan mengembalikan –1 jika ada error. Umumnya parameter protocol pada fungsi socket di set 0 (protocol yg digunakan sesuai tabel, dibawah)

7 7 ELEMENTARY TCP SOCKETS

8 8 CONTOH : int listensd; listensd=socket(AF_INET,SOCK_STREAM,0); if(listensd == -1){ perror("error socket"); exit(1); }

9 9 ELEMENTARY TCP SOCKETS Fungsi bind() Fungsi bind() digunakan untuk memberikan alamat (IP dan Nomor Port) ke socket descriptor. #include int bind( int listensd, const struct sockaddr *myaddr, int addrlen); Fungsi bind() mengembalikan nilai 0 jika sukses, atau -1 jika terjadi error.

10 10 ELEMENTARY TCP SOCKETS CONTOH: int tmp; struct sockaddr_in servaddr; bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = INADDR_ANY; servaddr.sin_port = htons(13); tmp=bind(listensd,(struct sockaddr *)&servaddr, sizeof(struct sockaddr) if(tmp == -1){ perror("error bind.."); exit(1) }

11 11 ELEMENTARY TCP SOCKETS #include struct in_addr{ u_long s_addr; /* 32-bit netid/hostid */ /* network byte ordered */ }; struct sockaddr_in { short sin_family; /*AF_INET*/ u_short sin_port; /*16 bit port number*/ /*network byte ordered*/ struct in_addr sin_addr; char sin_zero[8]; /* unused */ };

12 12 ELEMENTARY TCP SOCKETS Fungsi listen() #include int listen( int listensd, int backlog); listensd adalah TCP socket (sudah diikat / bind ke suatu address & Port) backlog adalah jumlah “incoming connections” yg disimpan dalam antrian / queue. listen() returns -1 jika terjadi error atau 0 jika sukses.

13 13 ELEMENTARY TCP SOCKETS CONTOH: #define LISTENQ 10 tmp=listen(listensd, LISTENQ); if(tmp == -1){ perror("error listen"); exit(1); }

14 14 ELEMENTARY TCP SOCKETS Fungsi accept() Setelah memanggil fungsi listen(), maka sistem operasi akan memasukkan incoming connections, ke dalam queue – Handles the 3-way handshake

15 15 ELEMENTARY TCP SOCKETS Fungsi accept() #include int accept( int listensd, struct sockaddr* cliaddr, socklen_t *addrlen); – listensd adalah TCP socket yang sudah dicreate sebelumnya. – cliaddr adalah pointer ke struct sockaddr_in untuk menyimpan alamat dari client yang connect dengan server – addrlen = size of cliaddr Fungsi accept() mengembalikan socket baru untuk komunikasi dan nilai -1 jika error

16 16 ELEMENTARY TCP SOCKETS CONTOH: int clisize,datasd; struct sockaddr_in cliaddr; clisize = sizeof(struct sockaddr_in); datasd=accept(listensd,(struct sockaddr *) &cliaddr, &clisize); if(datasd == -1){ perror("error accept"); exit(1); }

17 17 ELEMENTARY TCP SOCKETS Fungsi Connect() Fungsi connect() digunakan oleh fungsi client untuk melakukan koneksi dengan TCP Server. #include int connect (int sockfd, const struct sockaddr *servaddr, socklen_t addrlen); sockfd adalah TCP Socket yang sudah di-create sebelumnya. servaddr berisi address server(IP Address and TCP port number) connect() returns 0 if OK, -1 on error

18 18 ELEMENTARY TCP SOCKETS struct sockaddr_in servaddr; bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(13); if(inet_pton(AF_INET, “ ”, &servaddr.sin_addr) <= 0){ printf("inet_pton error"); exit(1); } if(connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){ perror("connect error"); exit(1); }

19 19 ELEMENTARY TCP SOCKETS Fungsi : read(), write() Fungsi read(), digunakan untuk menulis / mengirim data ke socket Fungsi write(), digunakan untuk membaca data dari socket Contoh: n = read(sockfd, buf, MAXLINE); Data yang dibaca disimpan pada buf, maximum data yang bisa dibaca dari socket adalah MAXLINE byte. fungsi read() mengembalikan nilai yang besarnya sama dengan jumlah byte yang dibaca. return 0 jika error

20 20 ELEMENTARY TCP SOCKETS Contoh: write(sockfd, buff, strlen(buff)); – Data yang ditulis / dikirim ke socket ditempatkan pada buff – fungsi write() return 0 jika terjadi error

21 21 Contoh Kasus Merancang aplikasi Client – Server (DayTimeServer dan DayTimeClient) dengan protocol TCP/IP

22 22 Contoh Kasus

23 23 DayTimeServer - TCP #include #define MAXLINE 100 #define LISTENQ 10 int main() { int tmp, listenfd, connfd; int sin_size; struct sockaddr_inservaddr, cliaddr; char buff[MAXLINE]; time_t ticks;

24 24 DayTimeServer - TCP //bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = INADDR_ANY; servaddr.sin_port = htons(13); memset(&(servaddr.sin_zero),'\0',8); listenfd = socket(AF_INET, SOCK_STREAM, 0); if(listenfd == -1){ perror("error socket"); exit(1); } tmp=bind(listenfd, (struct sockaddr *) &servaddr, sizeof(struct sockaddr)); if(tmp == -1){ perror("error bind.."); exit(1); }

25 25 DayTimeServer - TCP tmp=listen(listenfd, LISTENQ); if(tmp == -1){ perror("error listen"); exit(1); } sin_size = sizeof(struct sockaddr_in); connfd=accept(listenfd,(struct sockaddr *) &cliaddr, &sin_size); if(connfd == -1){ perror("error accept"); exit(1); } ticks = time(NULL); snprintf(buff,sizeof(buff),"Sekarang pukul: %.24s\r\n", ctime(&ticks)); write(connfd, buff, strlen(buff)); close(connfd); close(listenfd); } //main()

27 27 DayTimeClient - TCP if((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0){ perror("socket error"); exit(1); } bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(13); if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){ printf("inet_pton error for %s", argv[1]); exit(1); }

28 28 DayTimeClient - TCP if(connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){ perror("connect error"); exit(1); } while((n=read(sockfd,recvline, MAXLINE)) > 0){ recvline[n] = 0;/* null terminate */ if(fputs(recvline,stdout)==EOF) perror("fputs error"); } if(n < 0) perror("read error"); close(sockfd); return(0); }

29 29 Latihan Rubahlah program DayTimeServer agar setelah koneksi dengan client terputus server ready accept() lagi, seperti gambar berikut.

30 30 Latihan


Download ppt "Pertemuan 3 ELEMENTARY TCP SOCKETS I Made Astawa"

Presentasi serupa


Iklan oleh Google