Pertemuan 12 Membuat Program Client dan Server pada Win32 Console Application

Download Report

Transcript Pertemuan 12 Membuat Program Client dan Server pada Win32 Console Application

Matakuliah
Tahun
Versi
: H0483 – Network Programming
: 2008
: 2.0
Pertemuan 12
Membuat Program Client dan
Server pada Win32 Console
Application
1
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
• Mendemonstrasikan program aplikasi
Client Server pada Win32 Console
Application
2
Outline Materi
• Kasus: DayTimeServer dan DayTimeClient
• Membuat program Client di Win32 Console
Application dengan menggunakan Compiler
– Micosoft Visual C++ 6.0
– Borland C++ 5.0
– Dev C++
• Membuat program Server di Win32 Console
Application dengan menggunakan Compiler
– Micosoft Visual C++ 6.0
– Borland C++ 5.0
– Dev C++
3
Membuat Program DayTimeServer dengan
Microsoft VC++ 6.0
Langkah-Langkah :
• Jalankan VC++ kemudian pilih menu File  New
• Masukkan nama Project dan Lokasi / Folder untuk menyimpan
project tersebut
• Kemudian pilih Win32 Console Application
4
Membuat Program DayTimeServer dengan
Microsoft VC++ 6.0
• Pilih : A “Hello World” Application
kemudian klik Finish
5
Membuat Program DayTimeServer dengan
Microsoft VC++ 6.0
• Open file: DayTimeServerDos.cpp
kemudian edit file tersebut seperti sbb:
6
Membuat Program DayTimeServer dengan
Microsoft VC++ 6.0
#include "stdafx.h"
#include <winsock2.h>
#include <time.h>
int main(int argc, char* argv[])
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
struct sockaddr_in servAddr;
SOCKET sktServ;
sktServ = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sktServ == INVALID_SOCKET){
printf("Error in creating socket [%i]\n", WSAGetLastError());
WSACleanup();
return(-1);
}
7
Membuat Program DayTimeServer dengan
Microsoft VC++ 6.0
memset(&servAddr, 0, sizeof(struct sockaddr_in));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servAddr.sin_port = htons(6789);
if(bind(sktServ, (struct sockaddr*)&servAddr, sizeof(servAddr)) ==
SOCKET_ERROR){
printf("Error in binding socket [%i]\n", WSAGetLastError());
closesocket(sktServ);
WSACleanup();
return(-1);
}
if(listen(sktServ, 4) == SOCKET_ERROR){
printf("Error in listen socket [%i]\n", WSAGetLastError());
closesocket(sktServ);
WSACleanup();
return(-1);
}
8
Membuat Program DayTimeServer dengan
Microsoft VC++ 6.0
struct sockaddr_in clientAddr;
int clientAddrLen = sizeof(clientAddr);
SOCKET sktToClient;
sktToClient = accept(sktServ, (struct sockaddr*)&clientAddr, &clientAddrLen);
if(sktToClient == INVALID_SOCKET){
printf("Error in accept client [%i]\n", WSAGetLastError());
closesocket(sktServ); WSACleanup();
return(-1);
}
int sent; char sBuf[1024] = "";
time_t ltime;
time( &ltime );
sprintf(sBuf,"The time is %s\n", ctime(&ltime ));
sent = send(sktToClient, sBuf, strlen(sBuf), 0);
if(sent == 0) printf("Client closes connection\n");
else if(sent < 0) printf("Error in sending out data [%i]\n", WSAGetLastError());
closesocket(sktServ);
closesocket(sktToClient);
WSACleanup();
return 0;
}
9
Membuat Program DayTimeServer dengan
Microsoft VC++ 6.0
• Tambahkan : wsock32.lib pada Project settings
VC++ sbb:
10
Membuat Program DayTimeServer dengan
Microsoft VC++ 6.0
• Kemudian compilasi program !
• Setelah selesai, buat DayTimeClient nya
• Tahap-tahapnya sama dengan DayTime
Server diatas, tetapi code / programnya
adalah sbb:
11
Membuat Program DayTimeClient dengan
Microsoft VC++ 6.0
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
int main(int argc, char* argv[])
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
SOCKET sktClient;
sktClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sktClient == INVALID_SOCKET){
printf("Error in creating socket [%i]\n", WSAGetLastError());
WSACleanup();
return(-1);
}
// Connect to a server.
struct sockaddr_in clientAddr;
clientAddr.sin_family = AF_INET;
clientAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
clientAddr.sin_port = htons(6789);
12
Membuat Program DayTimeClient dengan
Microsoft VC++ 6.0
if(connect(sktClient, (struct sockaddr*)&clientAddr, sizeof(clientAddr)) ==
SOCKET_ERROR){
printf("Error in connecing server [%i]\n", WSAGetLastError());
closesocket(sktClient);
WSACleanup();
return(-1);
}
int recved;
char rBuf[1024] = "";
recved = recv(sktClient, rBuf, 1024, 0);
if(recved > 0) printf("%s\n", rBuf);
else if(recved == 0) printf("Server closes connection\n");
else{
printf("Error in receiving data [%i]\n", WSAGetLastError());
closesocket(sktClient);
WSACleanup();
return(-1);
}
closesocket(sktClient);
WSACleanup();
return 0;
}
13
Membuat Program DayTimeClient dengan
Microsoft VC++ 6.0
•
•
•
•
Tahap Selanjutnya : Test program
Jalankan program server terlebih dahulu
Kemudian jalankan program Clientnya
Kedua program diatas hanya jalan pada
satu komputer karena menggunakan local
IP address 127.0.0.1
14
Latihan
1. Modifikasi Contoh program pada power point
sebelumnya, agar nomor Port dan nomor IP
nya bisa dirubah-ubah pada command line.
(contoh: DayTimeServer <Port> <IP>)
2. Contoh Program pada Power Point
sebelumnya adalah Program DayTimeServer
dan DayTimeClient dengan menggunakan
protocol TCP/IP. Coba rubah/modifikasi agar
kedua program tersebut menggunakan
protokol UDP
15
Latihan
3. Kompilasi kedua contoh program diatas
dengan compiler yang lain misalnya :
Dev C++, atau Borland C++ (dan
modifikasi bila perlu)
16