#include <stdio.h> #include <sys/socket.h> #include <unistd.h> #include <sys/types.h> #include <netinet/in.h> #include <stdlib.h> #define SERVER_PORT 20000 // define the defualt connect port id #define CLIENT_PORT ((20001+rand())%65536) // define the defualt client port as a random port #define BUFFER_SIZE 255 #define REUQEST_MESSAGE "welcome to connect the server.\n" void usage(char* name) { printf( " usage: %s IpAddr\n " ,name); } int main(int argc, char** argv) { int servfd,clifd,length = 0; struct sockaddr_in servaddr,cliaddr; socklen_t socklen = sizeof (servaddr); char buf[BUFFER_SIZE]; if (argc < 2 ) { usage(argv[ 0 ]); exit( 1 ); } if ((clifd = socket(AF_INET,SOCK_STREAM, 0 )) < 0 ) { printf( " create socket error!\n " ); exit( 1 ); } srand(time(NULL)); // initialize random generator bzero( & cliaddr, sizeof (cliaddr)); cliaddr.sin_family = AF_INET; cliaddr.sin_port = htons(CLIENT_PORT); cliaddr.sin_addr.s_addr = htons(INADDR_ANY); bzero( & servaddr, sizeof (servaddr)); servaddr.sin_family = AF_INET; inet_aton(argv[ 1 ], & servaddr.sin_addr); servaddr.sin_port = htons(SERVER_PORT); // servaddr.sin_addr.s_addr = htons(INADDR_ANY); if (bind(clifd, (struct sockaddr* ) &cliaddr, sizeof (cliaddr)) < 0 ) { printf( " bind to port %d failure!\n " ,CLIENT_PORT); exit( 1 ); } if (connect(clifd,( struct sockaddr * ) & servaddr, socklen) < 0 ) { printf( " can't connect to %s!\n ", argv[ 1 ]); exit( 1 ); } length = recv(clifd, buf, BUFFER_SIZE, 0); if (length < 0) { printf( " error comes when recieve data from server %s! ", argv[1] ); exit( 1 ); } printf( " from server %s :\n\t%s", argv[1], buf); close(clifd); return 0; }
服务器端:一步一步学Linux C:Socket实例
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:http://127.0.0.1/wywyzg.html