C programlama etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C programlama etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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

C - TCP Client


#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>

///-----------------------------------
/// Main function: Program entry point
///
int main(int argc, char* argv[]){
int clientSock; // Client socket
char destIP[100];

// 1. Create a socket
clientSock = socket(AF_INET, // Address family
SOCK_STREAM, // Socket type
IPPROTO_TCP); // Protocol
if (clientSock < 0){
printf("Unable to create the socket\n");
return 0;
} //end-if

printf("Enter TCP server's IP address: ");
gets(destIP);

// Initialize server's IP + port and connect to the server
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr(destIP);
serverAddr.sin_port = htons(20000); // Port: 20000

// Connect to the server
if (connect(clientSock, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0){
perror("connect");
close(clientSock);
return -1;

} else
printf("Connected to the server...\n");

while (1){
char buffer[100000];
int msgSize;
int ret;

memset(buffer, 'A', 100000);
printf("Enter MsgSize [-1 to quit]>>");
scanf("%d", &msgSize);
if (msgSize > 100000) msgSize = 100000;
if (msgSize < 0) break;

ret = send(clientSock, buffer, msgSize, 0);
if (ret < 0) printf("send failed. Connection closed!\n");
} //end-while

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