Linux下C编程:socket实例2013-01-01 CSDN 张同浩客户端:
#include <stdio.h> #include <sys/socket.h> #include <unistd.h> #include <sys/types.h> #include <netinet/in.h> #include <stdlib.h>#defineSERVER_PORT 20000//define the defualt connect port id#defineCLIENT_PORT ((20001+rand())%65536)//define the defualt client port as a random port#defineBUFFER_SIZE 255#defineREUQEST_MESSAGE "welcome to connect the server.
"voidusage(char* name) {printf( " usage: %s IpAddr
" ,name); } intmain(int argc, char** argv) {intservfd,clifd,length = 0;structsockaddr_in servaddr,cliaddr;socklen_t socklen= sizeof (servaddr);charbuf[BUFFER_SIZE];if (argc < 2 ){ usage(argv[ 0 ]); exit( 1 );}if ((clifd=socket(AF_INET,SOCK_STREAM, 0 ))< 0 ){printf( " create socket error!
" );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!
" ,CLIENT_PORT); exit( 1 );} if (connect(clifd,( structsockaddr * ) & servaddr, socklen)< 0 ){ printf( " can"t connect to %s!
", 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 :
%s", argv[1], buf); close(clifd);return 0; }
服务器端:
#include<stdio.h>#include<sys/socket.h>#include<unistd.h>#include<sys/types.h>#include<netinet/in.h>#include<stdlib.h>#include<time.h>#defineSERVER_PORT 20000//define the defualt connect port id#defineLENGTH_OF_LISTEN_QUEUE 10// length of listen queue in server#defineBUFFER_SIZE 255#defineWELCOME_MESSAGE "welcome to connect the server. " int main(int argc, char** argv) {intservfd,clifd;structsockaddr_in servaddr,cliaddr; if((servfd=socket(AF_INET,SOCK_STREAM, 0 ))< 0 ){ printf( " create socket error!
" ); exit( 1 );} bzero( & servaddr, sizeof (servaddr)); servaddr.sin_family=AF_INET;servaddr.sin_port=htons(SERVER_PORT);servaddr.sin_addr.s_addr=htons(INADDR_ANY); if(bind(servfd,( structsockaddr * ) & servaddr, sizeof (servaddr)) < 0 ){ printf( " bind to port %d failure!
" ,SERVER_PORT); exit( 1 );}if(listen(servfd,LENGTH_OF_LISTEN_QUEUE)< 0 ){ printf( " call listen failure!
" ); exit( 1 );}while( 1 ){ // server loop will nerver exit unless any body kill the process charbuf[BUFFER_SIZE]; longtimestamp; socklen_t length= sizeof (cliaddr); clifd=accept(servfd,( structsockaddr * ) & cliaddr, & length); if(clifd< 0 ) {printf( " error comes when call accept!
" );break ;}strcpy(buf,WELCOME_MESSAGE); // inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);printf( " from client,IP:%s,Port:%d
" ,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));timestamp=time(NULL);strcat(buf, " timestamp in server: " ); strcat(buf,ctime( & timestamp));send(clifd,buf,BUFFER_SIZE, 0 ); close(clifd); } // exit close(servfd); return 0 ; }


查看全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm