Membuat Program Chatting Sederhana dengan C++

Membuat Program Chatting Sederhana dengan C++

Membuat program chatting sederhana di C++ dapat dilakukan dengan pendekatan berbasis terminal menggunakan soket jaringan untuk komunikasi antar komputer, atau secara lokal dengan simulasi percakapan antar pengguna dalam program. Di sini, kita akan membuat dua versi:

  1. Simulasi Chatting Lokal di Terminal.
  2. Chatting Berbasis Jaringan dengan Soket (TCP/IP).

1. Simulasi Chatting Lokal di Terminal

Program ini mensimulasikan dua pengguna yang bergantian mengetik pesan di terminal.

Kode

#include <iostream>
#include <string>
using namespace std;

int main() {
    string pesan;
    string pengguna1, pengguna2;

    cout << "Masukkan nama Pengguna 1: ";
    getline(cin, pengguna1);
    cout << "Masukkan nama Pengguna 2: ";
    getline(cin, pengguna2);

    cout << "\nSimulasi chatting dimulai! Ketik \"keluar\" untuk mengakhiri.\n\n";

    while (true) {
        // Pengguna 1
        cout << pengguna1 << ": ";
        getline(cin, pesan);
        if (pesan == "keluar") {
            cout << pengguna1 << " keluar dari obrolan.\n";
            break;
        }
        cout << pengguna1 << " mengatakan: " << pesan << "\n";

        // Pengguna 2
        cout << pengguna2 << ": ";
        getline(cin, pesan);
        if (pesan == "keluar") {
            cout << pengguna2 << " keluar dari obrolan.\n";
            break;
        }
        cout << pengguna2 << " mengatakan: " << pesan << "\n";
    }

    cout << "\nObrolan selesai. Terima kasih telah menggunakan program ini!\n";
    return 0;
}

Penjelasan

  • Program ini memungkinkan dua pengguna untuk bergantian mengetik pesan.
  • Ketik keluar untuk mengakhiri sesi chatting.

Output

Masukkan nama Pengguna 1: Alice
Masukkan nama Pengguna 2: Bob

Simulasi chatting dimulai! Ketik "keluar" untuk mengakhiri.

Alice: Hai, Bob!
Alice mengatakan: Hai, Bob!
Bob: Hai, Alice. Apa kabar?
Bob mengatakan: Hai, Alice. Apa kabar?
Alice: Keluar
Alice keluar dari obrolan.

Obrolan selesai. Terima kasih telah menggunakan program ini!

2. Chatting Berbasis Jaringan (TCP/IP)

Untuk membuat chatting berbasis jaringan, kita membutuhkan pustaka untuk soket. Di sistem Linux/Unix, Anda dapat menggunakan <sys/socket.h> dan <netinet/in.h>. Berikut adalah contoh sederhana.

Server

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
using namespace std;

int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);

    // Membuat socket file descriptor
    server_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (server_fd == 0) {
        perror("Socket gagal");
        return 1;
    }

    // Memasang opsi untuk socket
    setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

    // Menentukan alamat dan port
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(8080);

    // Mengikat socket
    bind(server_fd, (struct sockaddr *)&address, sizeof(address));

    // Mendengarkan koneksi
    listen(server_fd, 3);

    cout << "Menunggu koneksi...\n";
    new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t *)&addrlen);
    cout << "Koneksi diterima!\n";

    char buffer[1024] = {0};
    while (true) {
        memset(buffer, 0, sizeof(buffer));
        read(new_socket, buffer, 1024);
        if (strcmp(buffer, "keluar") == 0) {
            cout << "Obrolan selesai.\n";
            break;
        }
        cout << "Pesan diterima: " << buffer << "\n";

        cout << "Balasan: ";
        string balasan;
        getline(cin, balasan);
        send(new_socket, balasan.c_str(), balasan.length(), 0);
    }

    close(server_fd);
    return 0;
}

Client

#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
using namespace std;

int main() {
    int sock = 0;
    struct sockaddr_in serv_addr;

    // Membuat socket
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0) {
        cout << "Socket gagal dibuat.\n";
        return 1;
    }

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(8080);

    // Menghubungkan ke server
    if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
        cout << "Alamat tidak valid.\n";
        return 1;
    }

    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        cout << "Koneksi gagal.\n";
        return 1;
    }

    char buffer[1024] = {0};
    while (true) {
        cout << "Pesan: ";
        string pesan;
        getline(cin, pesan);
        send(sock, pesan.c_str(), pesan.length(), 0);
        if (pesan == "keluar") {
            cout << "Obrolan selesai.\n";
            break;
        }

        memset(buffer, 0, sizeof(buffer));
        read(sock, buffer, 1024);
        cout << "Balasan: " << buffer << "\n";
    }

    close(sock);
    return 0;
}

Penjelasan

  • Server:
    • Mendengarkan koneksi pada port 8080.
    • Membaca pesan dari klien dan mengirim balasan.
  • Client:
    • Menghubungkan ke server lokal (127.0.0.1).
    • Mengirim pesan dan menerima balasan dari server.

Menjalankan Program

  1. Jalankan server terlebih dahulu.
  2. Jalankan klien di terminal lain.
  3. Klien mengirim pesan, dan server membalas.

Catatan

  • Untuk program berbasis jaringan:
    • Gunakan sistem operasi berbasis Unix/Linux.
    • Perlu pengaturan jaringan tambahan jika ingin berjalan di dua perangkat berbeda.
  • Untuk implementasi lebih kompleks, gunakan pustaka seperti Boost.Asio untuk soket atau Qt untuk antarmuka grafis.

Jika Anda memerlukan penjelasan tambahan, beri tahu saya! 😊

Leave a Reply

Your email address will not be published. Required fields are marked *