• Tidak ada hasil yang ditemukan

TCP (Transfer Control Protocol) SOCKET PROGRAMMING

N/A
N/A
Protected

Academic year: 2021

Membagikan "TCP (Transfer Control Protocol) SOCKET PROGRAMMING"

Copied!
9
0
0

Teks penuh

(1)

TCP (Transfer Control Protocol) SOCKET PROGRAMMING

TCP menyediakan layanan transfer yang dapat diandalkan dengan mengirimkan paket datagrams per kelompok antar server dan client dengan pemeriksaan.

Keuntungan TCP:

- Mampu menangani paket yang hilang

- Mampu menangani kedatangan paket ganda.

- Dapat mengatasi penerimaan paket secara beriringan. - Menyediakan alur penerimaan paket.

- Data yang diterima dapat diepercaya dan diandalkan. Kelemahan TCP :

- Waktu lebih lama. - Paket yang dikirim besar. Fungsi socket protocol TCP

1. socket(AF_INET, SOCK_STREAM, 0), berfungsi untuk membuat socket dan parameter family yang digunakan adalah AF_INET yaitu internet protocol dan socket yang digunakan adalah SOCK_STREAM yang berfungsi untuk membuka socket pada TCP.

2. htonl(), meng-convert unsigned integer ke network byte order.

3. inet_ntoa(), ntoa singkatan 'network to ascii', nilai return-nya berupa string dari alamat yang dilewatkan.

4. inet_addr(), meng-convert string menjadi network byte order.

5. bind(), digunakan pada pihak server, untuk membuka 'port' komunikasi. 6. write(), send(), bertugas mengirimkan data.

7. read(), recv(), bertugas menerima data.

8. connect(), digunakan pada pihak client, untuk mengadakan koneksi ke server. 9. listen(), menunggu koneksi socket.

10. accept(), menerima koneksi socket.

(2)
(3)

Program TCP Socket dengan Bahasa C

Listing TCPServer.c:

/* TCPserver.c */ #include <stdio.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define KONEKSI_MAKSIMAL 10

int main (int argc, char *argv[]) {

struct sockaddr_in alamat_serv; struct sockaddr_in alamat_clie; unsigned no_port;

int socketfd; if (argc != 2) {

fprintf (stderr, "gunakan: %s <nomor_port>\n", argv[0]); exit(1);

}

no_port = atoi (argv[1]);

socketfd = socket (AF_INET, SOCK_STREAM, 0); /* untuk membersihkan child process,

yang telah selesai */ signal(SIGCHLD, SIG_IGN);

/* kita reset terlebih dahulu variable alamat_serv */ bzero (&alamat_serv, sizeof(alamat_serv));

alamat_serv.sin_family = AF_INET;

alamat_serv.sin_port = htons (no_port);

/* macro INADDR_ANY menghasilkan current ip */ alamat_serv.sin_addr.s_addr = htonl (INADDR_ANY); /* buka port */

if (bind (socketfd, (struct sockaddr *)&alamat_serv, sizeof (struct sockaddr)) < 0) {

fprintf (stderr, "maaf ya, tidak bisa memasang port !\n"); exit(1);

}

printf ("serverteman menunggu teman datang ...\n"); /* menuggu koneksi yang masuk,

(4)

listen (socketfd, KONEKSI_MAKSIMAL); while(1) {

int client_size = sizeof (struct sockaddr_in); int newfd;

/* menerima koneksi yang datang */

newfd =accept (socketfd, (struct sockaddr *)&alamat_clie, &client_size);

if(newfd == -1) { perror ("accept");

/* jika terjadi error akan looping lagi */ continue;

}

/* mengetahui siapa yang mengadakan koneksi */ printf("Teman dari %s telah datang\n", inet_ntoa (alamat_clie.sin_addr));

/* fork mengasilkan nilai return 0 pada child process,

pada parent process, fork() menghasilkan nilai pid dari child yang diciptakan*/

if (!fork ()) { /* child process */

/* peringatan !, variabel buffer hanya menampung 255 karakter */ char buffer[256];

sprintf (buffer, "Halo Teman, selamat datang di Server.Teman\n"); /* kirim pesan */

if (send (newfd, buffer, strlen (buffer), 0) == -1) { perror ("send"); continue; } close (newfd); exit (0); } else /* parent process,

disini tidak dibutuhkan newfd, jadi sebaiknya ditutup.

parent process akan looping lagi untuk menerima client yang lain*/ close (newfd);

}

return 0; }

(5)

Listing TCPClient.c :

/* TCPclient.c */ #include <stdio.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h>

int main (int argc, char *argv[]){ struct sockaddr_in alamat_ku; struct sockaddr_in tujuan; struct hostent *host_server;

int socketfd, connect_status, baca; int no_port;

char buffer[256]; if (argc != 3) {

fprintf (stderr, "gunakan: %s <alamat server > <nomor_port>\n", argv[0]);

exit(1); }

if ((socketfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf (stderr, "tidak bisa memasang socket !\n"); exit(1);

}

if ((host_server = gethostbyname(argv[1])) == NULL) { fprintf (stderr, "Nama host mungkin salah :)\n"); exit(1);

}

no_port = atoi(argv[2]);

bzero (&tujuan, sizeof(tujuan)); tujuan.sin_family = AF_INET;

tujuan.sin_port = htons (no_port);

memcpy ((char *)&tujuan.sin_addr.s_addr, host_server- >h_addr_list[0], host_server->h_length);

if ((connect_status = connect (socketfd, (struct sockaddr *)&tujuan, sizeof(tujuan))) < 0) {

fprintf(stderr, "%s: tidak dapat melakukan koneksi\n", argv[0]);

(6)

while((baca = recv(socketfd, buffer, strlen(buffer), 0)) > 0) { printf("%s", buffer); } close (socketfd); return 0; }

(7)

Program TCP Socket dengan Bahasa JAVA

Listing TCPEchoServerA.JAVA :

//Server that echoes back client's messages.

//At end of dialogue, sends message indicating number of //messages received. Uses TCP.

import java.io.*; import java.net.*; import java.util.*;

public class TCPEchoServerA {

private static ServerSocket servSock; private static final int PORT = 1234; public static void main(String[] args) {

System.out.println("Opening port...\n"); try

{

servSock = new ServerSocket(PORT); //Step 1. }

catch(IOException ioEx) {

System.out.println(

"Unable to attach to port!"); System.exit(1); } do { handleClient(); }while (true); }

private static void handleClient() {

Socket link = null; //Step 2. try

{

link = servSock.accept(); //Step 2. Scanner input = new Scanner(link.getInputStream());//Step 3. PrintWriter output = new PrintWriter( link.getOutputStream(),true); //Step 3. int numMessages = 0;

String message = input.nextLine(); //Step 4. while (!message.equals("***CLOSE***")) { System.out.println("Message received."); numMessages++; output.println("Message " + numMessages + ": " + message); //Step 4. message = input.nextLine(); } output.println(numMessages

(8)

catch(IOException ioEx) { ioEx.printStackTrace(); } finally { try { System.out.println( "\n* Closing connection... *"); link.close(); //Step 5. } catch(IOException ioEx) { System.out.println( "Unable to disconnect!"); System.exit(1); } } } }

Listing TCPEchoClientA.JAVA :

import java.io.*; import java.net.*; import java.util.*;

public class TCPEchoClientA {

private static InetAddress host; private static final int PORT = 1234; public static void main(String[] args) { try { host = InetAddress.getLocalHost(); } catch(UnknownHostException uhEx) {

System.out.println("Host ID not found!"); System.exit(1);

}

accessServer(); }

private static void accessServer() {

Socket link = null; //Step 1. try

{

link = new Socket(host,PORT); //Step 1. Scanner input =

new Scanner(link.getInputStream()); //Step 2. PrintWriter output =

new PrintWriter(

link.getOutputStream(),true); //Step 2. //Set up stream for keyboard entry...

(9)

Scanner userEntry = new Scanner(System.in); String message, response;

do {

System.out.print("Enter message: "); message = userEntry.nextLine(); output.println(message); //Step 3. response = input.nextLine(); //Step 3. System.out.println("\nSERVER> "+response); }while (!message.equals("***CLOSE***")); } catch(IOException ioEx) { ioEx.printStackTrace(); } finally { try { System.out.println( "\n* Closing connection... *"); link.close(); //Step 4. } catch(IOException ioEx) { System.out.println( "Unable to disconnect!"); System.exit(1); } } } }

Gambar

Diagram Alur Socket Programming dengan UDP

Referensi

Dokumen terkait

Program kegiatan PPM ini adalah program pendampingan yang berupa pelatihan (workshop) untuk meningkatkan kompetensi guru bahasa Inggris dalam mengevaluasi dan mengadaptasi

Adanya korelasi antara data kualitatif dan kuantitatif inilah yang mendasari bahwa keratin dan heat shock merupakan dua promoter yang sangat efektif dalam mengekspresikan gen GFP

Besarnya cadangan devisa negara yang telah digunakan untuk stabilisasi nilai rupiah dan pentingnya koordinasi antara pemerintah dari sisi kebijakan fiskal dan Bank Indonesia

Konsep ilmu mukasyafah dan basyari’ah dari al-Ghazali akan memunculkan postulat bahwa manusia pada hakikatnya tidak memiliki ilmu, sehingga dia diberi kemampuan untuk

Terdapat beberapa jenis mujtahid yakni mujtahid mutlak, mujtahid madzhab dan mujtahid mas’alah (Hilal, 2005). Mujtahid mutlak adalah mujtahid yang tidak hanya menarik hukum

Dan jika kita berkeliling di negara-negara Islam yang lain, maka kita pun akan menemukan bentuk acara dan waktu yang berbeda-beda dalam acara Maulid Nabi Muhammad shallallâhu

Mahasiswa dapat memahami Pengertian Ushul Fiqh, Fiqh dan bisa membedakan anatar fiqh dengan ushul fih serta memahami metode pembelajaran fiqh dalam islam.. Menyimak

Beberapa kelas java.net yang dapat digunakan dalam menerapkan pemrograman jaringan adalah: • Socket(InetAddress address, int port) : untuk membuat sebuah stream socket dan