C Socket Programming server client

用C语言socket编程写简单的server和client程序,目的为了测试一次socket连接中,,数据从client端开始发送至server端接受完毕所耗的时间,以及找到原因和提升性能。这里贴出代码,make以后,直接运行server和client即可。

sever.c

/************************************ * For msmr * server_s.c * tesing the speed of socket * 2015-02-04 * author@tom************************************/#include <stdio.h> #include <string.h>#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netinet/tcp.h> #define MAX_SIZE 300int main(int argc, char *argv[]) {int size = 300;int server_sockfd;int client_sockfd;int len;struct sockaddr_in my_addr;struct sockaddr_in remote_addr;int sin_size;char buf[MAX_SIZE];memset(&my_addr,0,sizeof(my_addr));my_addr.sin_family=AF_INET;my_addr.sin_addr.s_addr = htonl(0x7f000001); // 127.0.0.1my_addr.sin_port=htons(9023);if((server_sockfd=socket(PF_INET,SOCK_STREAM,0))<0){perror("socket");return 1;}if (bind(server_sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0){perror("bind");return 1;}listen(server_sockfd,5); // the length of listening queue is 5sin_size=sizeof(struct sockaddr_in);if((client_sockfd=accept(server_sockfd,(struct sockaddr *)&remote_addr,&sin_size))<0){perror("accept");return 1;}// set TCP_NODELAYint enable = 1;if(setsockopt(client_sockfd, IPPROTO_TCP, TCP_NODELAY, (void*)&enable, sizeof(enable)) < 0) // TCP_QUICKACKprintf("TCP_NODELAY SETTING ERROR!\n");struct timeval accept_t;gettimeofday(&accept_t,NULL);printf("Warning: server accept timestamp %lu.%06lu\n", accept_t.tv_sec, accept_t.tv_usec);printf("accept client %s\n",inet_ntoa(remote_addr.sin_addr));len=recv(client_sockfd,buf,MAX_SIZE,0);struct timeval start_t;gettimeofday(&start_t,NULL);printf("Warning: server finishes reading timestamp %lu.%06lu\n", start_t.tv_sec, start_t.tv_usec);close(client_sockfd);close(server_sockfd);return 0; }

client.c

/************************************ * For msmr * client_s.c * tesing the speed of socket * 2015-02-04 * author@tom************************************/#include <stdio.h> #include <string.h>#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netinet/tcp.h> #define MAX_SIZE 300int main(int argc, char *argv[]) {int client_sockfd;int len;struct sockaddr_in remote_addr;char buf[MAX_SIZE];memset(&remote_addr,0,sizeof(remote_addr));remote_addr.sin_family=AF_INET;remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");remote_addr.sin_port=htons(9023);if((client_sockfd=socket(PF_INET,SOCK_STREAM,0))<0){perror("socket");return 1;}if(connect(client_sockfd,(struct sockaddr *)&remote_addr,sizeof(struct sockaddr))<0){perror("connect");return 1;}printf("connected to server\n");// set TCP_NODELAYint enable = 1;if(setsockopt(client_sockfd, IPPROTO_TCP, TCP_NODELAY, (void*)&enable, sizeof(enable)) < 0) //TCP_QUICKACKprintf("TCP_NODELAY SETTING ERROR!\n");printf("Enter string to send:");while(scanf("%s",buf) <= 0){}struct timeval start_t;gettimeofday(&start_t,NULL);printf("Warning: Client timestamp %lu.%06lu\n", start_t.tv_sec, start_t.tv_usec);send(client_sockfd,buf,(int)strlen(buf),0);close(client_sockfd);return 0; }

Makefile

#! /bin/bash.PHONY:cleandefault:gcc -O3 server.c -o server -ggcc -O3 client.c -o client -gclean:rm server client

自己不喜欢的人,可以报之以沉默微笑;

C Socket Programming server client

相关文章:

你感兴趣的文章:

标签云: