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 :
·         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;
     }
}






 
Support : Creating Website | Johny Template | Mas Template
Copyright © 2011. i-beitrag - All Rights Reserved
Template Created by Creating Website Published by Mas Template
Proudly powered by Blogger