Skip navigation


Di ambil dari sini. Sedikit snippet tentang socket programming di C. Pemrograman ini menggunakan fungsi-fungsi socket yang sudah disediakan oleh Linux. Untuk beberapa OS lain seperti BSD dan MacOS kalau gak salah penangannya agak sedikit berbeda.

//File: client.c
#include
#include
#include
#include
#include
#include
#include

#define IP_DEST “127.0.0.1”
#define DEST_PORT 1311
#define MAXBUF 1024

int main(int argc, char * argv[]){
int sockfd; /* Socket file descriptor */
int bytes_read; /* Stream counter */
struct sockaddr_in dest; /* Internet socket handling structur */
char buffer[MAXBUF]; /* Buffer */

/* Open socket for streaming */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ perror("Socket"); return -1; } /* Initialize server address/port struct */ bzero(&dest, sizeof(dest)); dest.sin_family = AF_INET; dest.sin_port = htons(DEST_PORT); if ( inet_aton(IP_DEST, &dest.sin_addr.s_addr) == 0 ){ perror(IP_DEST); return -1; } /* Connect to server */ if ( connect(sockfd, (struct sockaddr*)&dest, sizeof(dest)) != 0 ){ return -1; } /* Sending message */ memset (buffer,'', MAXBUF); strcpy(buffer, "Hello World, Server"); printf("SND : %s\n", buffer); send(sockfd, buffer, strlen(buffer), 0); /* Recieving message */ memset (buffer,'', MAXBUF); recv(sockfd, buffer, MAXBUF, 0); printf("RCV : %s\n", buffer); printf("\n"); close(sockfd); return 0; } [/sourcecode] [sourcecode language="c"] //File: server.c #include
#include
#include
#include
#include
#include
#include

#define PORT_LISTEN 1311
#define MAXBUF 1024

int main(int argc, char * argv[]){
int sockfd; /* Socket file descriptor */
int bytes_read; /* Stream counter */
struct sockaddr_in self; /* Internet socket handling structur */
char buffer[MAXBUF]; /* Buffer */

/* Create streaming socket */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ perror("Socket"); exit(errno); } /* Initialize server address/port struct */ bzero(&self, sizeof(self)); self.sin_family = AF_INET; self.sin_port = htons(PORT_LISTEN); self.sin_addr.s_addr = INADDR_ANY; /* Assign a port number to the socket */ if (bind(sockfd, (struct sockaddr*)&self, sizeof(self)) != 0){ perror("socket--bind"); exit(errno); } /* Make it a listening socket */ if (listen(sockfd, 20) != 0){ perror("socket--listen"); exit(errno); } /* Listening forever */ while(1){ int clientfd; /* Client file descriptor */ struct sockaddr_in client_addr; int addrlen = sizeof(client_addr); memset(buffer, '', MAXBUF); /* Accepting connection, creating data pipe */ clientfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen); /* Recieving data */ int msg_length = recv(clientfd, buffer, MAXBUF, 0); printf("RCV : %s\n", buffer); /* Sending back data */ strcpy(buffer, "Hello World too, Client"); printf("SND : %s\n", buffer); send(clientfd, buffer, strlen(buffer), 0); } close(sockfd); return 0; } [/sourcecode] Kode server ini hanya mampu menangani single connection, untuk menangani koneksi simultan dibutuhkan fitur fork. Jadi setiap kali ada koneksi datang, aplikasi akan melakukan forking untuk melayani koneksi sambil menunggu koneksi yang lain. Dengan demikian koneksi yang lain tidak akan blocking. Hal ini dapat dilakukan karena socket sifatnya mampu melayani beberapa aplikasi sekaligus, berbeda dengan I/O device yang lain yang membutuhkan locking.

7 Comments

  1. btw, bahasa programming itu biasanya untuk apa ya?

  2. maksud?

  3. Lha mas gimana caranya pakai WIN32 api untuk socket programming?

    Kasihani programmer windows cupu2 bahagia ini

  4. pakai Java saja😛

  5. makjaaaaaannnggg…
    tau gini gw mampir sini dulu tadi pagi sblum ujian…
    *tapi ttp aja mngerikan…

  6. thanks for da info….

  7. ada juga orang indo yg tertarik socket programming yahh😛
    good example with C…


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: