Professional Documents
Culture Documents
September 2011
Information in this document, including URL and other Internet Web site referenc
es, is
subject to change without notice. This document supports a preliminary release o
f software
that may be changed substantially prior to final commercial release, and is the
proprietary
information of Binus University.
The entire risk of the use or the results from the use of this document remains
with the
user. Complying with all applicable copyright laws is the responsibility of the
user. Without
limiting the rights under copyright, no part of this document may be reproduced,
stored in
or introduced into a retrieval system, or transmitted in any form or by any mean
s
(electronic, mechanical, photocopying, recording, or otherwise), or for any purp
ose, without
the express written permission of Binus University.
The names of actual companies and products mentioned herein may be the trademark
s of
their respective owners.
Table of Contents
OVERVIEW .......................................................................
............................................... iii
Chapter 01 Introduction to Network Programming .................................
.......................... 1
Chapter 02 Introduction to I/O Multiplexing and Non Blocking System ............
............ 11
Chapter 03 Program Client - Server .............................................
.................................... 22
Chapter 04 Advance Program Client - Server .....................................
............................. 36
Chapter 05 Client
Server with Broadcast ........................................
.............................. 46
Chapter 06 Client Server with Winsock ..........................................
................................. 55
OVERVIEW
Chapter 01
Introduction to Network Programming
Chapter 02
Introduction to I/O Multiplexing and Non Blocking System
Chapter 03
Program Client - Server
Chapter 04
Advance Program Client - Server
Chapter 05
Client Server with Broadcast
Chapter 06
. Client Server with WinSock
Chapter 01
Introduction to Network Programming
Objective:
.
.
.
.
.
.
.
.
Learning Outcomes:
. Memilih teknik dan protocol pemrogram jaringan untuk pemecahan suatu masalah
. Memperhitungkan beberapa program dengan protokol yang umum dipergunakan pada
jaringan komputer.
. Menjelaskan berbagai macam komponen yang berhubungan dengan pemrograman jaring
an
Database Server
Printer
Modem
Fax
Server Data
Program client-server adalah suatu program yang terdiri dari client dan server.
Server disini bekerja sebagai penyedia resources, sedangkan client adalah pihak
yang
merequest/meminta resources.
Server
(listen)
Client
Request
via
Port
Server
Client
Response
via
Port
Client Server Definition
Client umumnya/pada dasarnya adalah suatu program yang terkoneksi pada satu
server, sedangkan server merupakan program yang menampung koneksi dari banyak
client.
(pengertian awam)
Concurrent Server adalah server yang dapat menghandle banyak server dan memberik
an
response terhadap request yang ada secara bersamaan (concurrent).
Iterative Server adalah server yang dapat menghandle banyak server dan memberika
n
response terhadap request yang ada satu per satu (per client request)
Pada umumnya client dan server menggunakan basis TCP dan UDP walaupun ada
kemungkinan menggunakan protokol lain seperti RTMP, FTP, dll.
UDP merupakan protokol yang berjalan di layer transport (layer 4 OSI) yang bersi
fat
sederhana yang dideskripsikan pada Data yang dikirim bersifat datagram yang memi
liki
panjang seperti record. Pengecekan data sukses tidaknya hanya menggunakan checks
um
sehingga kurang reliable.
IANA
Internet Assigned Numbers Authority adalah lembaga yang berwewenang
untuk mengatur angka untuk berberapa protokol yang ada.
1.3. ARPANET
Populer pada tahun 1975 sehingga pada akhirnya terciptalah pemrograman berbasis
TCP/IP yang awalnya hanya terdapat pada MILNET (Military Network) dan berkembang
menjadi INTERNET.
Aktivitas yang ada diatur dalam RFC (Internet Request For Comments).
Jika ada 2 program dengan layering seperti di atas maka jalannya program adalah:
7c <-> 6c <-> 5c <-> 4c <-> 3c <-> 2c <-> 1c ..
. <-> 1s <-> 2s
Dengan :
c = client
s = server
<-> 7s
Pada layer TCP/IP, koneksi TCP dan UDP terdapat pada ( layer 3 ).
4. Application (DHCP, DNS, FTP, HTTP, IMAP,
IRC, POP, RTP, SMTP, SNMP, SSH, Telnet,
SSL, SOCKS)
3. Transport (TCP, UDP, RSVP)
2. Internet (IP [IPv4,IPv6], ICMP(ICMP, ICMPv6)
1. Physical/Link Layer (ARP, NDP, OSPF, PPP,
MAC (Ethernet, DSL, ISDN)
Network programming dapat dilakukan pada berbagai macam operating system (OS) /
sistem operasi. Sistem operasi yang umum dilakukan adalah :
1. Windows
2. Linux
Pada sistem operasi Windows, metode yang dapat dilakukan adalah menggunakan
metode:
1. RPC (Windows NT Remote Procedure Call)
2. WinSock (Windows Socket)
3. WinNet API (File Server
Printer)
Pada sistem operasi Linux dan UNIX, metode yang dapat dilakukan adalah menggunak
an
metode pemanggilan sistem melalui socket(); yang terdapat pada #include
<sys/socket.h>
.
.
.
.
.
Salah satu fitur fungsi yang terdapat pada library WSA yang memiliki kapabilitas
pemrograman jaringan yaitu inisiasi adalah WSAStartup() .
I/O Multiplexing merupakan bagian dari I/O Model, dimana I/O model tersebut diba
gi
menjadi 5 bagian:
1. Blocking I/O
2. Non-Blocking I/O
3. I/O Multiplexing
select()
4. Signal Driven I/O
5. Asynchronous I/O
o <name of executeable>
Chapter 02
Introduction to I/O Multiplexing and Non
Blocking System
Objective:
.
.
.
.
.
.
.
I/O Multiplexing
Non Blocking System
Bzero memory Operations
Memcpy dan Memset
Little Endian (LSB) dan Big Endian (MSB)
gethostname, gethostbyname and inet_ntoa
Sockaddr
Learning Outcome:
. Memilih teknik dan protocol pemrogram jaringan untuk pemecahan suatu masalah
. Memperhitungkan beberapa program dengan protokol yang umum dipergunakan pada
jaringan komputer.
. Menjelaskan berbagai macam komponen yang berhubungan dengan pemrograman
jaringan
Pada dasarnya sistem default dari suatu socket adalah blocking system.
Artinya pemanggilan socket tidak dapat dilakukan secara langsung melainkan harus
melalui proses sleep dan menunggu suatu kondisi untuk menjadi true.
Input Operations
Output Operations
Accepting Incoming connections
Initiate outgoing connection
Input operations sendiri dibagi atas 5 fungsi dasar diantaranya : read, readv, r
ecv,
recvfrom dan recvmsg.
Output operations juga dibagi atas 5 fungsi dasar diantaranya : write, writev, s
end,
sendto, dan sendmsg.
Fungsi yang dipakai non-blocking system I/O adalah fungsi select. Fungsi ini dip
akai
untuk menentukan kondisi dimana deskriptor sedang readable atau writeable.
Untuk menunjukan kinerja client server pada komputer yang sama adapat menggunaka
n
fungsi fork.
Fungsi Bzero adalah menuliskan sejumlah null bytes ke tujuan. Jika bzero(char *d
est, int
nbytes) diisi dengan bzero(nama,10) maka nama akan dimasukan sejumlah 10 null by
tes.
int main()
{
//Baris ini untuk mendeklarasikan variabel pendukung
int i, len;
printf("BZero Course\n");
printf("=-=-=-=-=-=-\n\n");
//proceed bzero at ID
bzero (ID,sizeof(int)*3);
printf("\n\"ID\" after bzero (ID,sizeof(int)*3) : ");
for (i = 0; i<len; i++)
printf ("%d", ID[i]);
bzero(name,sizeof(char)*3);
printf("\n\"Name\" after bzero(name,sizeof(char)*3) : ");
for(i=0; i<len; i++)
printf("%c", name[i]);
return 0;
}
Output:
"ID" before bzero proceeded : 1123123456
"ID" after bzero (ID,sizeof(int)*3): 0003123456
"Name" before bzero proceeded : Successor Learner
"Name" after bzero(name,sizeof(char)*3) : cessor Learner
Memcpy adalah mencopy/menyalin sejumlah byte dari lokasi penujukan asal ( source
) ke
memori yang ditunjuk/dituju ( destination ).
char exampleword1[]="Sample string";
char exampleword2[50];
char exampleword3[50];
memcpy (exampleword2,exampleword1,strlen(exampleword3)+1);
memcpy (exampleword3,"copy completed!",16);
printf ("Example Word1: %s\n",str1);
printf ("Example Word2: %s\n",str2);
printf ("Example Word3: %s\n",str3);
maka tercetak
Example Word1: Sample string
Example Word2: Sample string
Example Word3: copy completed!
Memset adalah mengisi block dari memori.
Contoh:
char words[25] = " love you Sky =P";
memset (words,'I',3);
puts (words);
maka tercetak
"III love you Sky =P
Pertanyaannya: Apa perbedaan antara memcpy dan strcpy?
Untuk lebih mengerti silakan compile source code berikut:
#include <stdio.h>
#include <string.h>
int main()
{
//Baris ini untuk mendeklarasikan variabel pendukung
int i, len;
//melakukan memcpy
memcpy (name2,name1,sizeof(name1));
printf("%d",ID[i]);
//melakukan memset
memset (ID,0,sizeof(int)*3);
printf("\n");
return 0;
}
Konsep Little Endian dan Big Endian erat kaitannya dengan memori. Oleh sebab itu
, untuk
dapat mengerti kedua hal tersebut diperlukan pengetahuan dasar mengenai memori.
Sederhananya, memori adalah sederet array berukuran besar dengan setiap arraynya
mengandung bytes. Hanya saja dalam dunia komputer di bidang memori yang dikenal
bukanlah index melainkan istilah address . Itulah sebabnya memori terkadang dike
nal
dengan istilah byte-addressable.
Berikut ini adalah gambaran mudah mengenai Little Endian dan Big Endian.
Big Endian
Address
1009
1010
1011
1012
Value
A
B
C
D
Dari tabel ini didapatkan kesimpulan bahwa pada Big Endian, kita menyimpan the M
ost
Significant Byte pada address terkecil.
Little Endian
Address
1009
1010
1011
1012
Value
D
C
B
A
Dari tabel ini didapatkan kesimpulan bahwa pada Little Endian, kita menyimpan th
e Least
Significant Byte (LSB) pada address terkecil.
Conclusion = LSB reverse of MSB
Jika masih tidak mengerti, compilelah code di bawah ini:
Note: Pada buku ini, Little endian dan Big endian adalah konsep, bukan fungsi!!
#include <stdio.h>
union data
{
short s;
char c[sizeof(short)];
}uni;
int main()
{
uni.s = 0x0207;
printf("\n");
return 0;
gethostname adalah fungsi untuk mengembalikan nilai hostname dari komputer saat
ini
(return the name of the system)
int gethostname(char *name, size_t namelen);
.
.
.
.
returnnya sama.
Tapi lebih siap menghadapi Ipv6, temukan mengapa? .
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
//Semuanya deprecated!!
//Use inet_pton() or inet_ntop() instead!!
Pelajari prototype struct di bawah ini, karena inilah dasar Network Programming
!!!
include <netinet/in.h>
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
struct sockaddr_in {
short sin_family; // e.g. AF_INET, AF_INET6
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};
struct in_addr {
unsigned long s_addr; // load with inet_pton()
};
struct sockaddr_in6 {
struct in6_addr {
unsigned char s6_addr[16]; // load with inet_pton()
};
struct sockaddr_storage {
sa_family_t ss_family; // address family
int main()
{
struct hostent *host;
char compName[20];
char* compIp;
//applying gethostname
int hostname = gethostname(compName,sizeof(compName));
host = gethostbyname(compName);
2.7 Sockaddr
Adalah struct yang menampung informasi alamat socket untuk banyak tipe dari
sockets.
Contoh: Sudah di jelaskan di atas, ingat? .
int main()
{
char *ip1, *ip2;
struct sockaddr_in host1,host2;
//cetak IP addressnya
printf("\"IP1 Address\": %s\n",ip1);
printf("\"IP2 Address\": %s\n",ip2);
return 0;
}
Code sockaddr
Question
1. Ubahlah statement (code sockaddr):
Apa
Apa
Apa
Apa
itu
itu
itu
itu
sa_family? Jelaskan!
sin_addr? Jelaskan!
program client-server?
bzero?
Chapter 03
Program Client - Server
Objective:
.
.
.
.
.
Learning Outcome:
. Memilih teknik dan protocol pemrogram jaringan untuk pemecahan suatu masalah
. Memperhitungkan beberapa program dengan protokol yang umum dipergunakan pada
jaringan komputer.
. Menjelaskan berbagai macam komponen yang berhubungan dengan pemrograman jaring
an
Server Dasar
Pada bagian ini akan dikemukakan code beserta dengan penjelasannya. Code Lover,
bagian ini akan mempermudah Anda mempelajarinya. Setiap bagian code akan diberik
an
comment dan penjelasan dasar yang mengarahkan Anda untuk mengerti.
3.2.1. Program Server
Socket
Bind
Listen
Accept
Read & Write
Close
line/run
//return -1 if error
if(sockfd == -1)
{
perror ("Error : Socket Failed!, Get File Descriptor
Error!! : \n");
return 1;
}
//listen(sockfd, backlog)
//backlog = jumlah maksimal client connect
//biasanya maksimal 20
//tapi cenderung dipilih 5 atau 10
if(listen(sockfd,5) == -1)
{
perror("Error: Listen Failed!");
return 1;
}
//get clientsize
client_size = sizeof(client);
int nMsg = 0;
do {
//set all buffer message to zero
bzero(message,sizeof(message));
printf("\nMessage : %s\n",message);
//return -1 if error
if(sockfd == -1)
{
perror ("Error : Socket Failed!, Get File
Descriptor Error!! : \n");
return 1;
}
{
perror("Error: Connect Error!\n");
return 1;
}
printf("Client Active!\n");
do {
//set all buffer message to zero
bzero(message,sizeof(message));
do
{
printf("Input message [1..50 char]: ");
scanf("%[^\n]",message);
scanf("%c",&fflush);
//simple validation
}while(strlen(message)<1 ||
strlen(message)>50);
//close sockfd
close(sockfd);
return 0;
}
Pada bagian ini akan dikemukakan code beserta dengan penjelasannya. Code Lover,
bagian ini akan mempermudah Anda mempelajarinya. Setiap bagian code akan diberik
an
comment dan penjelasan dasar yang mengarahkan Anda untuk mengerti. Yang
membedakan adalah, disediakan thread, dimana thread memungkinkan
memungkinkan sebuah program untuk membagi dirinya menjadi beberapa task yang bis
a
berjalan bersamaan sekaligus. Task
task ini mempunyai Process ID (PID) yang sama
.
3.3.1. Program Server with thread
int sockfd;
//input argument for sockfd
sockfd = (int) arg;
do {
//set all buffer message to zero
bzero(message,sizeof(message));
if(read(sockfd,message,sizeof(message)) == -1)
{
perror("Error: Read failed! \n");
return 1;
}
printf("\nMessage from client (FD %d) :
%s\n",arg,message);
{
printf("This is message no. : %d.\n", nMessage
+ 1);
printf("Message Length : %d character.\n",
strlen(message));
nMessage++;
}
} while (strcmp (message, "exit") != 0);
//close socket
close(sockfd);
}
//thread id
pthread_t thread_id;
if(argc!=2)
{
printf("Insufficient Parameter!!!\\n");
return 0;
}
//return -1 if error
if(sockfd == -1)
{
perror ("Error : Socket Failed!, Get File Descriptor
Error!! : \n");
return 1;
}
if(listen(sockfd,5) == -1)
{
perror("Error: Listen Failed!");
return 1;
}
printf("Server Active!\n");
while(true) //loop forever
{
//save client size
client_size = sizeof(cli);
//create thread
if(pthread_create(&thread_id,NULL,thread_proc,(void*)newsockfd) == -1)
{
perror("Error : Create Thread Error\n");
return 1;
}
//detach thread
pthread_detach(thread_id);
}
//close socket
close(sockfd);
return 0;
}
//return -1 if error
if(sockfd == -1)
{
perror ("Error : Socket Failed!, Get File Descriptor
Error!! : \n");
return -1;
}
printf("Client Active!\n");
do {
//set all buffer message to zero
bzero(message,sizeof(message));
do
{
printf("Input message [1..50 char]: ");
scanf("%[^\n]",message);
scanf("%c",&fflush);
//simple validation
}while(strlen(message)<1 || strlen(message)>50);
//close socket
close (sockfd);
return 0;
}
3.5. Question
1. What is thread used for?
2. What is setsockopt and sigaction?
3. What should appear in socket for client and server?
To compile any of program in this HOL use:
gcc <name of source>
o <name of executeable>
Chapter 04
Advance Program Client - Server
Objective:
.
.
.
.
.
.
.
Select
FD_Set
FD_Zero
FD_ISSET
FD_CLR
Example of Select with input trigger
Example select implemented in client server
Learning Outcome:
. Memilih teknik dan protocol pemrogram jaringan untuk pemecahan suatu masalah
. Memperhitungkan beberapa program dengan protokol yang umum dipergunakan pada
jaringan komputer.
. Menjelaskan berbagai macam komponen yang berhubungan dengan pemrograman jaring
an
4.1. Select
4.2. FD_SET
Select() pada penjelasan diatas bekerja ketika ada perubahan pada file descripto
r (socket).
Caranya adalah mengisi fd_set dengan macro.
Fungsi terdapat pada : #include <sys/select.h>
Terdiri dari 2 parameter :
FD_SET(int fd, fd_set *fdset);
Jadi FD_SET adalah fungsi yang berguna untuk menetapkan nilai bit untuk file des
criptor
(fd) dalam file deskriptor yang diletakan dalam fd_set.
Note:
FD_SET (0, &fdread);
Jika terdapat nilai fd = 0, maka yang dimaksud adalah masukan berupa standard in
put.
4.3. FD_ZERO
FD_ZERO digunakan untuk menetapkan fdset yang ada untuk memiliki zero bit untuk
4.4. FD_ISSET
4.5. FD_CLR
FD_CLR digunakan untuk menbersikan semua bit pada file deskriptor (fd) dalam fds
et.
Fungsi terdapat pada : #include <sys/select.h>
Terdiri dari 2 parameter :
FD_CLR(fd, &fdset)
Note:
FD_ CLR (0, &fdread);
Jika terdapat nilai fd = 0, maka yang dimaksud adalah masukan berupa standard in
put.
Setelah mempelajari code di atas mungkin akan timbul pertanyaan apakah ada
contohnya? Berikut ini adalah contoh yang bisa dipakai untuk lebih memahami sele
ct.
Compile dan pelajarilah code berikut!
#include<stdio.h>
#include<sys/types.h>
#include<sys/time.h>
#include<unistd.h>
int main()
{
fd_set fdread;
//struct of time
struct timeval time;
FD_ZERO(&fdread);
FD_SET(0,&fdread);
select(1,&fdread,NULL,NULL,&time);
else {
printf("Time out occured - Enter doesn't pressed\n");
}
FD_CLR(0,&fdread);
return 0;
}
Question:
1. Apa perbedaan jika dilakukan penekanan ENTER dan tanpa penekanan ENTER
(pada code diatas)?
2. Apa fungsi FD_CLR? Bolehkah dihilangkan dari code? Mengertikah Anda dengan
program di atas? Jika ya, jelaskan jalannya program!
Berikut ini adalah contoh program menggunakan select pada client server
Just copy, compile, and study!! (CCS!!)
(server.c)
#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<strings.h>
int main()
{
//set controller
fd_set fd_set_master,fd_set_curr;
char message[255];
int i,client_size,byte_to_read,j;
int sockfd,newsockfd;
FD_ZERO(&fd_set_master);
//create socket
sockfd = socket(AF_INET,SOCK_STREAM,0);
{
perror("Error: Bind to port Failed!\n");
return 1;
}
while(true)
{
//set fd_set_curr base on fd_set_master
fd_set_curr = fd_set_master;
if(select(max_sockdesc + 1,&fd_set_curr,NULL,NULL,NULL)<0)
{
perror("Error: Select Failed\n");
return 1;
}
newsockfd = accept(sockfd,(struct
sockaddr*)&cli,(socklen_t*)&client_size);
else
{
//set the socket
FD_SET(newsockfd,&fd_set_master);
if(newsockfd > max_sockdesc)
{
max_sockdesc = newsockfd;
}
printf("Accept connection from
client %s at socket %d\n",inet_ntoa(cli.sin_addr),newsockfd);
}
}
else
{
//You can!" The longer answer is,
//"You can, but send() and recv() offer
//much greater control over your data transmission.
//Because it using file descriptor, so it can read and write
byte_to_read = read(i,message,sizeof(message));
if(byte_to_read<=0)
{
if(byte_to_read ==0)
{
perror("Socket %d
disconnected\n",i);
else
{
perror("Error : Read
failed!\n");
return 1; }
close(i);
FD_CLR(i,&fd_set_master);
}
else
{
for(j=0; j<=max_sockdesc; j++)
{
if(FD_ISSET(j,&fd_set_master))
{
if(j!=sockfd && j!=i)
{
}
}
}
return 0;
}
(client.c)
#include<sys/socket.h>
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<strings.h>
#include<stdlib.h>
int main()
{
int sockfd;
struct sockaddr_in serv;
char message[255],fflush;
//create socket
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
perror ("Error : Socket Failed!, Get File Descriptor
Error!! : \n");
return 1;
}
serv.sin_family = AF_INET;
do
{
printf("Input message [1..50 char]: ");
scanf("%[^\n]",message);
scanf("%c",&fflush);
//simple validation
}while(strlen(message)<1 || strlen(message)>50);
bzero(message,sizeof(message));
if(read(sockfd,message,sizeof(message))==-1)
{
perror("Error : Read failed!\n");
return 1;
}
close(sockfd);
return 0;
}
Jalankan program di atas dengan cara :
gcc server.c
o server
./server
./client
Chapter 05
Client
Server with Broadcast
Objective:
. Unicast
. Multicast
. Broadcast
Learning Outcome:
. Memilih teknik dan protocol pemrogram jaringan untuk pemecahan suatu masalah
. Memperhitungkan beberapa program dengan protokol yang umum dipergunakan pada
jaringan komputer.
. Menjelaskan berbagai macam komponen yang berhubungan dengan pemrograman jaring
an
5.1. Unicast
Unicast merupakan suatu teknik dimana data dikirimkan merupakan jenis paket yang
berasal dari satu titik. Paket ini memiliki 1 MAC address pengirim dan satu MAC
address
penerima.
Jaringan-jaringan yang bersifat unicast : http (kasusnya terlihat ketika kita br
owsing),
telnet, ftp, smtp, pop3, dsb.
5.2. Multicast
Multicast merupakan suatu teknik dimana data yang dikirimkan mempunyai lebih dar
i 1
titik dimana titik yang mendengarkan dan mengirimkan berasal dari resources yang
berbeda.
Konsep ini terpakai di siaran radio dan televisi (kebetulan penulis pernah mengg
eluti
usaha ini)
Analoginya: untuk siaran televisi, jika kita hendak menonton siaran khusu, maka
kita
harus merubah frekuensi televisi ke frekuensi yang tepat (dan ingat, berjuta-jut
a orang
bisa mendengarkan radio yang sama, dan jenis frekuensi radio ada banyak)
5.3. Broadcast
Jenis ketiga adalah jenis broadcast. Jenis ini merupakan jenis teranyar untuk di
bahas dan
dipelajari. Jika Anda telah mempelajari Jaringan Komputer, apalagi jika sudah be
rtemu di
kelas sang penulis mungkin sudah mengenal ini.
Broadcast biasanya dikirimkan untuk menyatakan keberadaan suatu layanan. Selain
itu
broadcast juga dapat digunakan untuk pencarian sebuah titik pada jaringan. Terut
ama
pada konsep DHCP (Dynamic Routing, yang tentunya tidak dibahas disini).
Contoh nyata penggunaan prinsip ini adalah : NETBIOS yang dikirimkan oleh Window
s
yang berisi nama komputer dan workgroup.
Kalau di jalan di sekitar Jakarta, ibarat tukang sayur yang sedang menjajakan sa
yurnya.
Ia biasa berteriak, .Sayuurr, ssayurr !.. Untuk membuat orang mengetahui tentang
dia dan apa yang ia jual/punya.
Pada jaringan komputer, umunya diberikan suatu titik khusus untuk broadcast yait
u pada
bagian x.x.x.255 (untuk memperkecil pengaruh broadcast agar jaringan tidak menga
lami
traffic yang disebabkan oleh broadcast semata). 255 = FF:FF:FF:FF:FF:FF
Pada bagian ini akan dijelaskan code mengenai broadcast terlebih dahulu. Dibatas
i
sampai sini dahulu.
Contohnya adalah pada chatting MIRC. Terdapat broadcasting untuk memberitahukan
ada user yang masuk. Berikut contoh potongan codenya:
#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<strings.h>
#include<string.h>
#include<netinet/in.h>
#include<pthread.h>
int count=0;
int save_socket[10];
if(read(newsocketfd,name,sizeof(name)) == -1)
{
perror("Error: Read failed! \n");
return 1;;
}
while(true)
{
//clear zero in
bzero(in,sizeof(in));
if(read(newsocketfd,in,sizeof(in))<=0)
{
perror("Error: Read failed! \n");
return 1;
}
if(strcmp(in,"exit")==0)
break;
printf("Received message from %s : %s [%d char]\n",name,
in, strlen(in));
bzero(out,sizeof(out));
int main()
{
struct sockaddr_in serv,cli;
int sockdf,newsocketfd;
int client_size, i;
char message[255],name[100],fflush;
pthread_t thread_id;
sockdf = socket(AF_INET,SOCK_STREAM,0);
if(sockdf==-1)
{
perror("Error : Create Error\n");
return 0;
}
system ("clear");
printf ("MIRC Simple Server\n");
printf ("================\n\n");
while(true){
client_size = sizeof(cli);
//create thread
if(pthread_create(&thread_id,NULL,thread_proc,(void*)newsocketfd)
<0)
{
perror("Error : Create Thread Error\n");
return 1;
}
pthread_detach(thread_id);
}
//close socket
close(sockdf);
return 0;
}
Di atas adalah program server, berikut ini program clientnya.
#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<strings.h>
#include<string.h>
#include<netinet/in.h>
#include<pthread.h>
while(true)
{
//set all buffer message to zero
bzero(message,sizeof(message));
int main()
{
struct sockaddr_in serv;
int sockfd;
char message[255],name[100],fflush,ip[15];
pthread_t thread_id;
//return -1 if error
if(sockfd == -1)
{
perror ("Error : Socket Failed!, Get File Descriptor
Error!! : \n");
return 1;
}
if(write(sockfd,name,sizeof(name))<=0)
{
perror("Error: Write Error!\n");
return 1;
}
system ("clear");
if(pthread_create(&thread_id,NULL,thread_proc,(void*)sockfd)<0)
{
perror("Error: Thread Error\n");
return 1;
}
do
{
bzero(message,sizeof(message));
scanf("%[^\n]",&message);
scanf("%c",&fflush);
//close socket
close(sockfd);
return 0;
}
Question and task:
1. Apakah fungsi program diatas?
2. Tunjukan outputnya!
3. Apa fungsi dari write();
If you wanna be master in socket, update that source code to recv() and send();
Chapter 06
Client Server with Winsock
Objective:
. WSADATA
. Winsock Client
. Winsock Server
Learning Outcomes:
. Memilih teknik dan protocol pemrogram jaringan untuk pemecahan suatu masalah
. Memperhitungkan beberapa program dengan protokol yang umum dipergunakan pada
jaringan komputer.
. Menjelaskan berbagai macam komponen yang berhubungan dengan pemrograman jaring
an
6.1. WSADATA
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}
// Connect to server.
iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr>ai_addrlen);
if (iResult == SOCKET_ERROR) {
closesocket(ConnectSocket);
ConnectSocket = INVALID_SOCKET;
continue;
}
break;
}
freeaddrinfo(result);
if (ConnectSocket == INVALID_SOCKET) {
printf("Unable to connect to server!\n");
WSACleanup();
return 1;
}
if ( iResult > 0 )
printf("Bytes received: %d\n", iResult);
else if ( iResult == 0 )
printf("Connection closed\n");
else
printf("recv failed with error: %d\n", WSAGetLastError());
// cleanup
closesocket(ConnectSocket);
WSACleanup();
return 0;
}
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
int iSendResult;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
freeaddrinfo(result);
return 1;
}
// cleanup
closesocket(ClientSocket);
WSACleanup();
return 0;
}
References :
Steven, W. Richard. 1998. UNIX Network Programming. Prentice Hall: London.
Windows Programming MSDN:
http://msdn.microsoft.com/en-us/library/ms741563(v=vs.85).aspx
http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html#lowlevel
http://www.linuxhowtos.org/C_C++/socket.htm
http://www.tenouk.com/Winsock/Winsock2story.html