2.3 TCP协议下并发性问题

head.h

 1 #ifndef __HEAD_H__
 2 #define __HEAD_H__
 3 
 4 #include <stdio.h>
 5 #include <stdlib.h>
 6 #include <string.h>
 7 #include <sys/socket.h>
 8 #include <sys/types.h>
 9 #include <arpa/inet.h>
10 #include <netinet/in.h>
11 #include <netinet/ip.h>
12 #include <unistd.h>
13 #include <error.h>
14 #include <errno.h>
15 
16 #define error_exit(_errmsg_)    error(EXIT_FAILURE, errno, _errmsg_)
17 #define SER_PORT    50000
18 #define SER_ADDR    "192.168.239.129"
19 
20 #endif

Makefile

1 ALL:server client
2 
3 server:server.c
4     gcc $< -o $@
5 client:client.c
6     gcc $< -o $@
7 .PHONY:
8 clean:
9     rm server client

client.c

 1 #include "head.h"
 2 
 3 int main(void)
 4 {
 5     int sockfd = 0;
 6     struct sockaddr_in seraddr;
 7     char buff[] = "hello world!";
 8     char ret[1024] = {0};
 9 
10     seraddr.sin_family = AF_INET;
11     seraddr.sin_port = htons(SER_PORT);
12     seraddr.sin_addr.s_addr = inet_addr(SER_ADDR);
13 
14     if (-1 == (sockfd = socket(AF_INET, SOCK_STREAM, 0)))
15         error_exit("fail to socket");
16     if (-1 == (connect(sockfd, (struct sockaddr *)&seraddr, sizeof(seraddr))))
17         error_exit("fail to connect");
18 
19     sleep(10);
20 
21     if (-1 == send(sockfd, buff, strlen(buff)+1, 0))
22         error_exit("fail to send");
23     
24     if (-1 == recv(sockfd, &ret, sizeof(ret), 0))
25         error_exit("fail to recv");
26     printf("ret = %s\n", ret);
27 
28     close(sockfd);
29 
30     return 0;
31 }

server.c

 1 #include "head.h"
 2 
 3 int main(void)
 4 {
 5     int sockfd = 0;
 6     int confd = 0;
 7     char ret[1024] = {0};
 8     struct sockaddr_in seraddr,cltaddr;
 9     socklen_t addrlen;
10 
11     seraddr.sin_family = AF_INET;
12     seraddr.sin_port = htons(SER_PORT);
13     seraddr.sin_addr.s_addr = inet_addr(SER_ADDR);
14 
15     if (-1 == (sockfd = socket(AF_INET, SOCK_STREAM, 0)))
16         error_exit("fail to socket");
17     if (-1 == bind(sockfd, (struct sockaddr *)&seraddr, sizeof(seraddr)))
18         error_exit("fail to bind");
19     if (-1 == listen(sockfd, 10))
20         error_exit("fail to listen");
21 
22     while (1)
23     {
24         if (-1 == (confd = accept(sockfd, (struct sockaddr *)&cltaddr, &addrlen)))
25             error_exit("fail to socket");
26     
27         if (-1 == recv(confd, ret, sizeof(ret), 0))
28             error_exit("fail to recv");
29         printf("RECV:%s\n", ret);
30         strcat(ret, "----echo");
31     
32         if (-1 == (send(confd, ret, strlen(ret)+1, 0)))
33             error_exit("fail to send");
34     }
35     
36     close(confd);
37     close(sockfd);
38 
39     return 0;
40 }

posted @ 2017-03-13 22:04  bkycrmn  阅读(159)  评论(0)    收藏  举报