Senin, 05 April 2010

TEMAN - TEMAN NICH LA PEMROGRAMAN JARINGAN PERTEMUAN 4 YACH :

1. TCPCLIENT

/* TCPclient.c */
#include
#include
#include
#include
#include
#include
#include
#include

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 \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]); exit(1); } while((baca = recv(socketfd, buffer, strlen(buffer), 0)) > 0) {
printf("%s", buffer);
}

close (socketfd);
return 0;
}

2. TCPSERVER

/* TCPserver.c */
#include
#include
#include
#include
#include
#include
#include

#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 \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,
* koneksi maksimal dilayani sebanyak KONEKSI_MAKSIMAL
*/
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;
}

0 komentar:

Posting Komentar

 
Copyright 2009 IceTea Zone. Powered by Blogger
Blogger Templates created by Deluxe Templates
Wordpress by Wpthemescreator
Blogger Showcase