Selasa, 18 Februari 2014

Socket Programming C

Kali ini saya akan membahas Socket Programming menggunakan bahasa pemrograman C beserta dengan contohnya.

Apa yang harus disiapkan ?

Hal yang harus disiapkan terlebih dahulu sebelum mengikuti step-step di bawah adalah file server.c dan client.c

Untuk source code aplikasi server dalam bahasa C adalah sebagai berikut (simpan dengan nama
server.c) :

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int sock;
    struct sockaddr_in server;
    int mysock;
    char buff[1024];
    int rval;

    sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock < 0)
    {
        perror("Failed to create socket");
        exit(1);
    }

    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons(5000);

    if(bind(sock,(struct sockaddr *)&server, sizeof(server)))
    {
        perror("bind failed");
        exit(1);
    }

    listen(sock, 5);

    do {
        mysock = accept(sock, (struct sockaddr *) 0, 0);
        if (mysock == -1)
        {
            perror("accept failed");
        }
        else
        {
            memset(buff, 0, sizeof(buff));
            if ((rval = recv(mysock, buff, sizeof(buff),0)) < 0)
                perror("reading stream message error");
            else if (rval == 0)
                printf("Ending connection");
            else
                printf("MSG : %s\n", buff);
            printf("Got the message (rval = %d)\n", rval);
            close(mysock);
        }
    }while(1);

    return 0;
}




Untuk source code aplikasi client dalam bahasa C adalah sebagai berikut (simpan dengan nama
client.c) :

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define DATA "Hello World of socket"

int main(int argc, char *argv[])
{
    int sock;
    struct sockaddr_in server;
    struct hostent *hp;
    char buff[1024];

    sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock < 0)
    {
        perror("socket failed");
        exit(1);
    }

    server.sin_family = AF_INET;
    hp = gethostbyname (argv[1]);
    if(hp == 0)
    {
        perror("gethostbyname failed");
        close(sock);
        exit(1);
    }

    memcpy(&server.sin_addr, hp->h_addr, hp->h_length);
    server.sin_port = htons(5000);

    if(connect(sock,(struct sockaddr *) &server, sizeof(server)) < 0)
    {
        perror("connect failed");
        close(sock);
        exit(1);
    }

    if (send(sock, DATA, sizeof(DATA), 0) < 0)
    {
        perror("send failed");
        close(sock);
        exit(1);
    }

    printf("Sent %s\n", DATA);
    close(sock);

    return 0;
}


Setelah memiliki file server.c dan client.c ?

Berikut ini langkah-langkah setelah membuat file server.c dan client.c

1. Buka 2 terminal, 1 untuk server dan 1 lagi untuk client

Terminal 1

 
Terminal 2


2. Masuk ke direktori file server.c dan client.c
    Karena saya menyimpan kedua file tersebut pada /Home maka saya tidak perlu melakukan apa-apa. Jika kalian tidak menyimpan di /Home maka dapat dilakukan dengan mengetikkan cd "nama direktori" tanpa tanda petik.


Terminal 1

 
Terminal 2

3. Compile server.c di terminal 1

Terminal 1


4. Compile client.c di terminal 2

Terminal 2


5. Jalankan server.c

Terminal 1


6. Jalankan client.c dengan penambahan localhost

Terminal 2


7. Tampilan berikut menandakan bahwa sistem client-server telah berhasil dibuat


Terminal 1


 

Terminal 2


Itulah step-step yang dilakukan untuk membuat Socket Programming menggunakan bahasa pemrograman C. Jika ingin menghasilkan sistem yang lebih kompleks, file server.c dan client.c dapat dimodifikasi sesuai kebutuhan.

Sumber :
1. http://www.youtube.com/watch?v=Q8Eqby-xKKw

Tidak ada komentar:

Posting Komentar