server2
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define PORT 1234
#define BACKLOG 1
#define MAXDATASIZE 100
int main ( void ) {
int listenfd, connectfd;
struct sockaddr_in server, client;
socklen_t sin_size;
if ( ( listenfd= socket ( AF_INET, SOCK_STREAM, 0 ) ) == - 1 ) {
perror ( "create socket failed" ) ;
exit ( - 1 ) ;
}
int opt = SO_REUSEADDR;
setsockopt ( listenfd, SOL_SOCKET, SO_REUSEADDR, & opt, sizeof ( opt) ) ;
bzero ( & server, sizeof ( server) ) ;
server. sin_family= AF_INET;
server. sin_port= htons ( PORT) ;
server. sin_addr. s_addr = htonl ( INADDR_ANY) ;
if ( bind ( listenfd, ( struct sockaddr* ) & server, sizeof ( struct sockaddr) ) == - 1 ) {
perror ( "Bind error" ) ;
exit ( - 1 ) ;
}
if ( listen ( listenfd, BACKLOG) == - 1 ) {
perror ( "listen error" ) ;
exit ( - 1 ) ;
}
sin_size= sizeof ( struct sockaddr_in) ;
if ( ( connectfd= accept ( listenfd, ( struct sockaddr* ) & client, & sin_size) ) == - 1 ) {
perror ( "accept error." ) ;
exit ( - 1 ) ;
}
printf ( "You get a connection from ip=%s,port=%d\n" , inet_ntoa ( client. sin_addr) , client. sin_port) ;
int num;
char recvbuf[ MAXDATASIZE] , sendbuf[ MAXDATASIZE] ;
while ( ( num= recv ( connectfd, recvbuf, MAXDATASIZE, 0 ) ) ) {
recvbuf[ num] = '\0' ;
printf ( "Received client message:%s\n" , recvbuf) ;
int i= 0 ;
for ( ; i< num; i++ ) {
sendbuf[ i] = recvbuf[ num- i- 1 ] ;
}
sendbuf[ num] = '\0' ;
send ( connectfd, sendbuf, strlen ( sendbuf) , 0 ) ;
}
close ( connectfd) ;
return 0 ;
}
client2
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define PORT 1234
#define MAXDATASIZE 100
int main ( int argc, char * argv[ ] ) {
int fd;
struct hostent* he;
struct sockaddr_in server;
if ( argc!= 2 ) {
printf ( "Usage:%s<IP address>\n" , argv[ 0 ] ) ;
exit ( - 1 ) ;
}
if ( ( he= gethostbyname ( argv[ 1 ] ) ) == NULL ) {
perror ( "gethostbyname error." ) ;
exit ( 1 ) ;
}
if ( ( fd= socket ( AF_INET, SOCK_STREAM, 0 ) ) == - 1 ) {
perror ( "Create socket failed." ) ;
exit ( 1 ) ;
}
bzero ( & server, sizeof ( server) ) ;
server. sin_family= AF_INET;
server. sin_port= htons ( PORT) ;
server. sin_addr= * ( ( struct in_addr* ) he-> h_addr) ;
if ( connect ( fd, ( struct sockaddr* ) & server, sizeof ( struct sockaddr) ) == - 1 ) {
perror ( "connect failed." ) ;
exit ( 1 ) ;
}
printf ( "connect successful\n" ) ;
int num;
char recvbuf[ MAXDATASIZE] ;
char sendbuf[ 100 ] ;
while ( 1 ) {
printf ( "send server message:" ) ;
scanf ( "%s" , sendbuf) ;
send ( fd, sendbuf, strlen ( sendbuf) , 0 ) ;
if ( ( num= recv ( fd, recvbuf, MAXDATASIZE, 0 ) ) ) {
recvbuf[ num] = '\0' ;
printf ( "Received server message:%s\n" , recvbuf) ;
}
}
close ( fd) ;
return 0 ;
}