Senin, 09 Februari 2015

Program chatting antar Komputer

Berikut ini adalah program chatting antar komputer yang di persembahakan oleh Kabul Wahyudi




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