Tampilan Programnya
// Program Chat
// Program yang digunakan untuk melakukan koneksi 2 arah
//#include <cstdlib>
#include <iostream>
#include <winsock.h>
#include <windows.h>
#include <string>
#define CON_PORT 54321 // Port yang akan dihubungi
#define REC_PORT 12345 // Port untuk listening
using namespace std;
// Function Prototype
bool bConnectTo(char* pszAddress, int nNoPort);
bool bListenOnPort(int nNoPort);
void CloseConnection(SOCKET sock);
DWORD WINAPI Connect(LPVOID Param);
DWORD WINAPI Receive(LPVOID PARAM);
// Global Variables
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[])
{
bool bStatus;
DWORD id;
// Banner
cout << "===========================================" << endl
<< "= Program Chatting dengan socket =" << endl
<< "===========================================" << endl;
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)
{
// Infinite looping untuk mengerim data berulang-ulang
char szInput[1024] = {'\0'}; // Inisiasi variabel NULL
SOCKET sSend;
cout << "send> ";
cin.getline(szInput, 1024); // Input user dimasukkan ke szInput[]
sSend = send(sConn, szInput , 1024, 0); // mengirim
if (sSend == INVALID_SOCKET)
{
cout << "(Gagal Mengirim)" << endl;
}
else
{
cout << "(Sending 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)
{
// 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 << "data> " << szMessage << endl << "send> ";
}
}
}
DWORD WINAPI Connect(LPVOID Param)
{
bool bKondisi;
while(true)
{
Sleep(1000);
bKondisi = bConnectTo("192.168.7.1", 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); // Mengaktifkan Winsock
if (error)
{
// Jika terjadi error (nilai return != 0)
return false;
}
if (wsa1.wVersion != 0x0202)
{
// Jika versi socket tidak sesuai
WSACleanup();
return false;
}
SOCKADDR_IN addr; // Struktur socket
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); // Membuat Socket
if (sConn == INVALID_SOCKET)
{
// Jika Socket gagal dibuat
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;
}
}
bool bListenOnPort(int nNoPort)
{
int error = WSAStartup(0x0202, &wsa2); // Mengaktifkan Winsock
if (error)
{
// Jika terjadi error (nilai return != 0)
return false;
}
if(wsa2.wVersion != 0x0202)
{
// Jika Versi Socket tidak sesuai
WSACleanup();
return false;
}
SOCKADDR_IN addr; // Structur Socket
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); // Membuat Socket
if(sRecv == INVALID_SOCKET)
{
// Jika Socket tidak bisa dibuat
return false;
}
if(bind(sRecv, (LPSOCKADDR) &addr, sizeof(addr)) == SOCKET_ERROR)
{
// Jika terjadi error saat memanggil fungsi bind()
return false;
}
listen(sRecv, SOMAXCONN); // siap mendengarkan
}
void CloseConnection(SOCKET sock)
{
if (sock)
{
// Jika socket masih ada maka socket ditutup
closesocket(sock);
}
// Data diebrsihkan
WSACleanup();
}
lalu cara setting IP nya
1. Start
2. Control Panel
3. Network and Internet
4. Network Connections
5. klik kanan
6. properties
7. Internet Protocol version 4 (TCP/IPv4)
8. lalu klik Use the following IP address:
lalu masukkan IP dan Subnet mask seperti dibawah ini
lalu untuk tampilan share wifi nya seperti dibawah ini
Notes :
1. IP komputer Harus diseting sama dengan Program contoh 192.168.7.1
2. Untuk Terhubung Komputer Server dengan Client Bisa menggunakan Kebel Lan Cros atau Wifi Lektop yang di setting Share