Вы находитесь на странице: 1из 3

TCP Echo Server

Server code
/* Program for a simple TCP echo server */
# include < sys / socket .h >
# include < arpa / inet .h >
# include < stdio .h >
# include < string .h >

# define SERVERPORT 8000


# define BUFFERSIZE 1024

int main ()
{
int req_socket , conn_socket , bytes_sent , bytes_received , \
sock_len , connect_status , bind_status ;
struct sockaddr_in sock_server , sock_client ;
char recv_buffer [ BUFFERSIZE ] , send_buffer [ BUFFERSIZE ];

sock_len = sizeof ( sock_client ) ;

// Create server socket for requests


req_socket = socket ( AF_INET , SOCK_STREAM , 0) ;
if ( req_socket == -1)
{
printf ( " Socket creation failed .\ n " ) ;
close ( req_socket ) ;
return 1;
}
else
{
printf ( " Socket creation successful with descriptor % d .\ n " , req_socket ) ;
}

// Binding the socket


sock_server . sin_family = AF_INET ;
sock_server . sin_addr . s_addr = htonl ( INADDR_ANY ) ;
sock_server . sin_port = htons ( SERVERPORT ) ;

bind_status = bind ( req_socket , ( struct sockaddr *) & sock_server , \


sizeof ( sock_server ) ) ;
if ( bind_status == 1)
{
printf ( " Socket binding failed .\ n " ) ;
close ( req_socket ) ;
return 1;
}
else

1
{
printf ( " Socket binding successful .\ n " ) ;
}

// Listen for TCP connection requests


printf ( " Listening for connection requests .\ n " ) ;
listen ( req_socket , 5) ;

conn_socket = accept ( req_socket , ( struct sockaddr *) & sock_client , & sock_len ) ;


if ( conn_socket == -1)
{
printf ( " Socket creation for client failed .\ n " ) ;
close ( conn_socket ) ;
close ( req_socket ) ;
return 1;
}
else
{
printf ( " Socket created for client with descriptor % d .\ n " , conn_socket ) ;
}

// Receiving data from client through the connection socket


bytes_received = recv ( conn_socket , recv_buffer , BUFFERSIZE , 0) ;
printf ( " % d bytes received : % s \ n " , bytes_received , recv_buffer ) ;

// Sending the received packet back to the client


strcpy ( send_buffer , recv_buffer ) ;
bytes_sent = send ( conn_socket , send_buffer , strlen ( send_buffer ) , 0) ;
printf ( " % d bytes sent : % s \ n " , bytes_sent , send_buffer ) ;

// Close the sockets


close ( req_socket ) ;
close ( conn_socket ) ;

return 0;
}

Client code
/* Program for a simple TCP echo client */
# include < sys / socket .h >
# include < arpa / inet .h >
# include < stdio .h >
# include < string .h >

# define SERVERADDRESS " 127.0.0.1 "


# define SERVERPORT 8000
# define BUFFERSIZE 1024

int main ()
{
int conn_socket , bytes_received , bytes_sent , sock_len , conn_status ;
struct sockaddr_in sock_server , sock_client ;

2
char recv_buffer [ BUFFERSIZE ] , send_buffer [ BUFFERSIZE ];

sock_len = sizeof ( sock_server ) ;

// Create a connection socket for client


conn_socket = socket ( AF_INET , SOCK_STREAM , 0) ;
if ( conn_socket == -1)
{
printf ( " Socket creation failed .\ n " ) ;
close ( conn_socket ) ;
return 1;
}
else
{
printf ( " Socket creation successful with descriptor % d .\ n " , conn_socket ) ;
}

// Requesting for a TCP connection to the server


memset (& sock_server , 0 , sizeof ( sock_server ) ) ;
sock_server . sin_family = AF_INET ;
inet_aton ( SERVERADDRESS , & sock_server . sin_addr ) ;
sock_server . sin_port = htons ( SERVERPORT ) ;

conn_status = connect ( conn_socket , ( struct sockaddr *) & sock_server , sock_len ) ;


if ( conn_status == -1)
{
printf ( " Connection to server failed .\ n " ) ;
close ( conn_socket ) ;
return 1;
}
else
{
printf ( " Connected to the server .\ n " ) ;
}

// Reading a message from the keyboard for sending to the server


printf ( " Enter the message to send : " ) ;
scanf ( " %[^\ n ] " , send_buffer ) ;

// Sending the message to the server


bytes_sent = send ( conn_socket , send_buffer , strlen ( send_buffer ) , 0) ;
printf ( " % d bytes sent : % s \ n " , bytes_sent , send_buffer ) ;

// Waiting for the echo packet from the aserver


bytes_received = recv ( conn_socket , recv_buffer , BUFFERSIZE , 0) ;
printf ( " % d bytes received : % s \ n " , bytes_received , recv_buffer ) ;

// Close the socket


close ( conn_socket ) ;

return 0;
}

Вам также может понравиться