30 Ocak 2012 Pazartesi

C - TCP Server

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <memory.h>

///--------------------------------------------------------
///
int main(int argc, char* argv[]){
int serverSock;
struct sockaddr_in me;
int ret;
int optVal;

//
// Create a TCP/IP stream socket to "listen" to connections
//
serverSock = socket(AF_INET, // Address family
SOCK_STREAM, // Socket type (TCP)
IPPROTO_TCP); // Protocol
if (serverSock < 0){
printf("Unable to create the socket\n");
return 0;
} //end-if


optVal = 1;
ret = setsockopt(serverSock, SOL_SOCKET, SO_REUSEADDR, &optVal, sizeof(optVal));
if (ret < 0) printf("setsockopt failed\n");

// Initialize my and peer's address structures.
me.sin_family = AF_INET;
me.sin_addr.s_addr = htonl(INADDR_ANY);
me.sin_port = htons(20000); // TCP port 20000

//
// bind the name to the socket
//
ret = bind(serverSock, // Socket
(struct sockaddr *)&me, // Our address
sizeof(me)); // Size of address structure
if (ret < 0){
printf("Bind failed.\n");
close(serverSock);
return 0;
} //end-if


// Start listening for a connection
ret = listen(serverSock, 10); // Connection request queue
if (ret < 0){
printf("listen failed\n");
close(serverSock);
return 0;
} //end-if

while (1){
struct sockaddr_in clientAddr;
int addrLength = sizeof(clientAddr);
unsigned char *p = (unsigned char *)&clientAddr.sin_addr;
int clientSock;

printf("Server is ready and waiting for connections at port %d\n", 20000);

//
// Wait for an incoming request
//
clientSock = accept(serverSock, // Listening socket
(struct sockaddr *)&clientAddr, // Optional client address
&addrLength);
if (clientSock < 0){
close(serverSock);
return 0;
} //end-if

printf("Accepted a connection..");
printf("clientIPAddr: %d.%d.%d.%d:%d\n", p[0], p[1], p[2], p[3], ntohs(clientAddr.sin_port));

char buffer[100000];
while (1){
ret = recv(clientSock, buffer, 100000, 0);
if (ret <= 0) break;

printf("Received %d bytes from the client\n", ret);
} //end-while

printf("Client closed connection.\n");
close(clientSock);
} //end-while

close(serverSock);
return 0;
} //end-main

Hiç yorum yok:

Yorum Gönder