TUGAS UAS KOMUNIKASI DATA MEMBUAT APLIKASI CHATING MENGGUNAKAN C++
TUGAS UAS KOMUNIKASI DATA MEMBUAT APLIKASI CHATING MENGGUNAKAN C++
1. 1. Coding pada program
ü
Pada Server 1
//program client
#include <cstdlib>
#include <iostream>
#include <winsock.h>
#include <windows.h>
#include
<string>
#define CON_PORT 2015
#define REC_PORT 2014
using namespace std;
bool bConnectTo (char* pszAaddress, int nNoPort);
bool bListenOnPort (int nNonPort);
void CloseConnection(SOCKET sock);
DWORD WINAPI Connect (LPVOID Param);
DWORD WINAPI Receive (LPVOID PARAM);
SOCKET sConn;
SOCKET sRecv;
WSADATA wsa1; bConnectTo()
WSADATA wsa2; bListenOnPort()
int main(int argc, char *argv[])
{
bool bStatus;
DWORD id;
bStatus =
bListenOnPort (REC_PORT);
if (bStatus
== false )
{
cout
<< endl << "Listening pada port " << REC_PORT
<< " gagal!!" << endl;
}
else
{
cout
<< endl << "Listening pada port " << REC_PORT
<< "Berhasil!!" << endl;
}
CreateThread
(NULL,0, &Connect,NULL,0, &id);
CreateThread
(NULL,0 ,&Receive, NULL,0,&id);
while (true)
{
char
szInput [1024] = { '\0'};
SOCKET
sSend; // Handle return fungsi send ()
cout
<< "send 1> ";
cin.getline (szInput, 1024);
sSend =
send (sConn,szInput,1024,0); dari szInput
if
(sSend == INVALID_SOCKET)
{
cout
<< "(Gagal Mengirim)" << endl;
}
else
{
cout
<< "Sedding OK)" << endl;
}
}
system
("PAUSE");
return
EXIT_SUCCESS;
}
DWORD WINAPI
Receive (LPVOID Param)
{
SOCKET sAcc;
sAcc = accept
(sRecv,NULL,NULL);
if (sAcc ==
INVALID_SOCKET)
{
cout
<< endl << "Koneksi gagal diterima!!" << endl;
}
else
{
cout
<< endl << "Koneksi berhasil diterima" << endl
<< "send>";
}
while (true)
{
Sleep(100);
char
szMessage[1024] = { '\0' };
SOCKET
sRcv;
sRcv =
recv(sAcc, szMessage, 1024, 0);
if(sRcv
== INVALID_SOCKET)
{
cout
<< endl <<"Gagal Menerima Data!!" << endl;
break;
}
else
{
cout << endl << "pesan atau data dari pengirim :
" << szMessage << endl << "send>";
}
}
}
DWORD WINAPI Connect (LPVOID Param)
{
bool
bKondisi;
while
(true)
{
Sleep
(1000);
bKondisi = bConnectTo("192.168.14.7",CON_PORT);
if
(bKondisi == true)
{
cout << endl << "Koneksi Berhasil" << endl
<< "send>";
break;
}
}
return 0;
}
bool bConnectTo (char* pszAddress, int nNoPort)
{
int error =
WSAStartup (0x0202, &wsa1);
if (error)
{
return false;
}
if
(wsa1.wVersion !=0x0202)
{
WSACleanup ();
return false;
}
SOCKADDR_IN
addr;
addr.sin_family = AF_INET;
addr.sin_port = htons (nNoPort);
addr.sin_addr.s_addr = inet_addr (pszAddress);
sConn =
socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sConn ==
INVALID_SOCKET)
{
return false;
}
if (connect
(sConn, (SOCKADDR *) & addr, sizeof(addr)) == SOCKET_ERROR)
{
return false;
}
else
{
return true;
}
}
bool bListenOnPort (int nNoPort)
{
int error =
WSAStartup (0x0202, &wsa2);
if (error)
{
return
false;
}
if(wsa2.wVersion !=0x0202)
{
WSACleanup();
return
false;
}
SOCKADDR_IN
addr;
addr.sin_family = AF_INET;
addr.sin_port
= htons(nNoPort);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
sRecv =
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sRecv ==
INVALID_SOCKET)
{
return
false;
}
if(bind(sRecv, (LPSOCKADDR) &addr, sizeof(addr)) == SOCKET_ERROR)
{
return
false;
}
listen
(sRecv,SOMAXCONN);
}
void CloseConnection(SOCKET sock)
{
if (sock)
{
closesocket(sock);
}
WSACleanup();
}
|
ü
Pada Server 2
//program client
#include <cstdlib>
#include <iostream>
#include <winsock.h>
#include <windows.h>
#include
<string>
#define CON_PORT 2014
#define REC_PORT 2015
using namespace std;
bool bConnectTo (char* pszAaddress, int nNoPort);
bool bListenOnPort (int nNonPort);
void CloseConnection(SOCKET sock);
DWORD WINAPI Connect (LPVOID Param);
DWORD WINAPI Receive (LPVOID PARAM);
SOCKET sConn;
SOCKET sRecv;
WSADATA wsa1; bConnectTo()
WSADATA wsa2; bListenOnPort()
int main(int argc, char *argv[])
{
bool bStatus;
DWORD id;
bStatus =
bListenOnPort (REC_PORT);
if (bStatus
== false )
{
cout
<< endl << "Listening pada port " << REC_PORT
<< " gagal!!" << endl;
}
else
{
cout
<< endl << "Listening pada port " << REC_PORT
<< "Berhasil!!" << endl;
}
CreateThread
(NULL,0, &Connect,NULL,0, &id);
CreateThread
(NULL,0 ,&Receive, NULL,0,&id);
while (true)
{
char
szInput [1024] = { '\0'};
SOCKET
sSend;
cout
<< "send 2> ";
cin.getline (szInput, 1024);
sSend =
send (sConn,szInput,1024,0);
if
(sSend == INVALID_SOCKET)
{
cout
<< "(Gagal Mengirim)" << endl;
}
else
{
cout
<< "Sedding OK)" << endl;
}
}
system
("PAUSE");
return
EXIT_SUCCESS;
}
DWORD WINAPI
Receive (LPVOID Param)
{
SOCKET sAcc;
sAcc = accept
(sRecv,NULL,NULL);
if (sAcc ==
INVALID_SOCKET)
{
cout
<< endl << "Koneksi gagal diterima!!" << endl;
}
else
{
cout
<< endl << "Koneksi berhasil diterima" << endl
<< "send>";
}
while (true)
{
Sleep(100);
char
szMessage[1024] = { '\0' };
SOCKET
sRcv;
sRcv =
recv(sAcc, szMessage, 1024, 0);
if(sRcv
== INVALID_SOCKET)
{
cout
<< endl <<"Gagal Menerima Data!!" << endl;
break;
}
else
{
cout << endl << "pesan atau data pengirim : "
<< szMessage << endl << "send>";
}
}
}
DWORD WINAPI Connect (LPVOID Param)
{
bool
bKondisi;
while
(true)
{
Sleep
(1000);
bKondisi = bConnectTo("192.168.14.2",CON_PORT);
if
(bKondisi == true)
{
cout << endl << "Koneksi Berhasil" << endl
<< "send>";
break;
}
}
return 0;
}
bool bConnectTo (char* pszAddress, int nNoPort)
{
int error =
WSAStartup (0x0202, &wsa1); Winsock
if (error)
{
return false;
}
if
(wsa1.wVersion !=0x0202)
{
WSACleanup ();
return false;
}
SOCKADDR_IN
addr;
addr.sin_family = AF_INET;
addr.sin_port = htons (nNoPort);
addr.sin_addr.s_addr = inet_addr (pszAddress);
sConn =
socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
socket
if (sConn ==
INVALID_SOCKET)
{
return false;
}
if (connect
(sConn, (SOCKADDR *) & addr, sizeof(addr)) == SOCKET_ERROR)
{
return false;
}
else
{
return true;
}
}
bool bListenOnPort (int nNoPort)
{
int error =
WSAStartup (0x0202, &wsa2); Winsock
if (error)
{
return
false;
}
if(wsa2.wVersion
!=0x0202)
{
WSACleanup();
return
false;
}
SOCKADDR_IN
addr;
addr.sin_family = AF_INET;
addr.sin_port
= htons(nNoPort);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
sRecv =
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); Socket
if(sRecv ==
INVALID_SOCKET)
{
return
false;
}
if(bind(sRecv, (LPSOCKADDR) &addr, sizeof(addr)) == SOCKET_ERROR)
{
return
false;
}
listen
(sRecv,SOMAXCONN);
}
void CloseConnection(SOCKET sock)
{
if (sock)
{
closesocket(sock);
}
WSACleanup();
}
|
2. 2..Contoh tampilan program saat di eksekusi. Disini
digunakan 2 komputer yang saling terkoneksi.
ü
Saat program mulai di eksekusi (RUN), pertama
program akan membuat sambungan dari server 1 ke server 2 dan sebaliknya.
ü
Setelah berhasil akan muncul pesan bahwa komeksi
berhasil diterima
ü
Kemudia kami berikan contoh screenshoot dari
chat yang dilakukan oleh 2 komputer yang sudah kami jalankan aplikasi chating
tersebut
3. 3. Konfigurasi IP pada 2 komputer agar dapat
terhubung. Dan disini kami menggunakan cabel LAN jenis cross untuk
menghubungkan/mengkoneksikan 2 komputer tersebut.
Caranya :
Caranya :
·
Pada Network Connection di PC anda pilih Open
Network And Sharing Center. Bisa juga di akses melalui Control Panel
·
Diaccess type connection pilih Local Area
Network.
·
Lalu pilih properties. Disini akan kita setting
IP addressnya.
·
Setelah itu pilih TCP/IPv4
·
Silahkan untuk mensetting IP seperti dibawah ini
untuk server, lalu ok,ok,ok
·
Dan seperti dibawah ini untuk client, lalu
ok,ok,ok.
4. 4. Penjelasan potongan codingnya akan kami elaskan
dibawah.
ü
Potongan coding pada server 1
#define CON_PORT 2015 //Port
yang akan dihubungi
#define REC_PORT 2014 // Port
untuk listening
//variabel global
SOCKET sConn; // Socket yang
digunakan pada fungsi bConnectTo()
SOCKET sRecv; // Socket yang
digunakan pada fungsi bListenOnPort()
WSADATA wsa1; // Object WSADATA
yang digunakan pada fungsi bConnectTo()
WSADATA wsa2; // Object WSADATA
yang digunakan pada fungsi bListenOnPort()
int main(int argc, char
*argv[])
// Infinite looping untuk
menampilkan data terus-menerus
Sleep(100); // tunda eksekusi selama
100 milisecond
char szMessage[1024] = { '\0' }; //
Inisiasi variable NULL
SOCKET sRcv; // Handle return fungsi
recv()
bool bConnectTo (char*
pszAddress, int nNoPort)
{
int error = WSAStartup (0x0202,
&wsa1); // Mengaktifkan Winsock
if (error)
{
// jika terjadi error (nilai
return !=0)
return false;
}
if (wsa1.wVersion !=0x0202)
{
// Jika versi socket tidak
sesuai
WSACleanup ();
return false;
}
ü
Potongan coding pada server 2
#define CON_PORT 2014 //Port
yang akan dihubungi
#define REC_PORT 2015 // Port
untuk listening
SOCKET sConn; // Socket yang
digunakan pada fungsi bConnectTo()
SOCKET sRecv; // Socket yang
digunakan pada fungsi bListenOnPort()
WSADATA wsa1; // Object WSADATA
yang digunakan pada fungsi
// Infinite looping untuk
menampilkan data terus-menerus
Sleep(100); // tunda eksekusi selama 100
milisecond
char szMessage[1024] = { '\0' }; //
Inisiasi variable NULL
SOCKET sRcv; // Handle return fungsi
recv()
sRcv = recv(sAcc, szMessage, 1024, 0);
// menerima
if(sRcv == INVALID_SOCKET)
{
cout << endl
<<"Gagal Menerima Data!!" << endl;
break; // Akhiri looping
}
else
{
//tampilkan data dari client
cout << endl <<
"pesan atau data pengirim : " << szMessage << endl
<< "send>";
}
}
}
SOCKADDR_IN addr; // Struktur
socket
addr.sin_family = AF_INET;
addr.sin_port = htons (nNoPort);
addr.sin_addr.s_addr = inet_addr
(pszAddress);
// membuat Socket
sConn = socket (AF_INET, SOCK_STREAM,
IPPROTO_TCP); //membuat socket
if (sConn == INVALID_SOCKET)
{
// Jika Socket Gagagl di buat
return false;
}
if (connect (sConn, (SOCKADDR *) &
addr, sizeof(addr)) == SOCKET_ERROR)
{
// Jika tidak dapat melakukan
koneksi
return false;
}
else
{
// jika dapat melakukan koneksi
return true;
}
}