步骤1:同上:

步骤2:建立目录

  cd workdir/linux/application/

  mkdir -p 12-network/tcp

  cd tcp

步骤3:复制

  cp /mnt/hgfs/share/2.\ Linux系统部分/17.\ Linux系统tcp网络协议编程实验/实验代码/client.c ./ -a

  cp /mnt/hgfs/share/2.\ Linux系统部分/17.\ Linux系统tcp网络协议编程实验/实验代码/server.c ./ -a

步骤4:执行

  gcc client.c -o client

  gcc server.c -o server

  ./sever 1923168.100.192 8888

  打开新终端

  cd workdir/linux/application/12-network/tcp/

  ./client 192.168.100.192 8888

 附:程序源码

  server.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 #include <sys/types.h>
 5 #include <sys/socket.h>
 6 #include <errno.h>
 7 #include <string.h>
 8 #include <arpa/inet.h>
 9 #include <netinet/in.h>
10 
11 #define N 64
12 
13 int main(int argc, char *argv[])//./server ip port
14 {
15     int listenfd, connfd;
16     struct sockaddr_in myaddr, peeraddr;
17     socklen_t len;
18     char buf[N] = {0};
19     ssize_t n;
20 
21     if (argc < 3)
22     {
23         printf("usage:%s ip port\n", argv[0]);
24         return 0;
25     }
26 
27     if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
28     {
29         perror("socket");
30         exit(-1);
31     }
32 
33     memset(&myaddr, 0, sizeof(myaddr));
34     myaddr.sin_family = AF_INET;
35     myaddr.sin_port = htons(atoi(argv[2]));//"6000"--6000 htons(6000);
36     myaddr.sin_addr.s_addr = inet_addr(argv[1]);
37 
38     if (bind(listenfd, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1)
39     {
40         perror("bind");
41         exit(-1);
42     }
43 
44     if (-1 == listen(listenfd, 5)) 
45     {
46         perror("listen");
47         exit(-1);
48     }
49 
50     memset(&peeraddr, 0, sizeof(peeraddr));
51     len = sizeof(peeraddr);
52 
53     while (1)
54     {
55         if ((connfd = accept(listenfd, (struct sockaddr *)&peeraddr, &len)) == -1)
56         {
57             perror("accept");
58             exit(-1);
59         }
60         printf("from %s:%d\n", inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port));
61     
62         while (1)
63         {
64             memset(buf, 0, sizeof(buf));
65             n = recv(connfd, buf, N, 0);//a b c \n  n=4
66             if (n == 0)
67                 break;
68             buf[n] = '\0';
69             printf("n=%d %s", n, buf);
70 
71             send(connfd, buf, n, 0);
72         }
73 
74         close(connfd);
75     }
76 
77     return 0;
78 }

  client.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 #include <sys/types.h>
 5 #include <sys/socket.h>
 6 #include <errno.h>
 7 #include <string.h>
 8 #include <arpa/inet.h>
 9 #include <netinet/in.h>
10 
11 #define N 64
12 
13 int main(int argc, char *argv[])//./server ip port
14 {
15     int sockfd;
16     struct sockaddr_in servaddr, myaddr;
17     char buf[N] = {0};
18 
19     if (argc < 3)
20     {
21         printf("usage:%s ip port\n", argv[0]);
22         return 0;
23     }
24 
25     if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
26     {
27         perror("socket");
28         exit(-1);
29     }
30 
31 #if 0
32     memset(&myaddr, 0, sizeof(myaddr));
33     myaddr.sin_family = AF_INET;
34     myaddr.sin_port = htons(8000);//"6000"--6000 htons(6000);
35     myaddr.sin_addr.s_addr = inet_addr(argv[1]);
36 
37     if (bind(sockfd, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1)
38     {
39         perror("bind");
40         exit(-1);
41     }
42 #endif
43 
44     memset(&servaddr, 0, sizeof(servaddr));
45     servaddr.sin_family = AF_INET;
46     servaddr.sin_port = htons(atoi(argv[2]));//"6000"--6000 htons(6000);
47     servaddr.sin_addr.s_addr = inet_addr(argv[1]);
48     
49     if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1)
50     {
51         perror("connect");
52         exit(-1);
53     }
54 
55     printf(">");
56     while (fgets(buf, N, stdin) != NULL)
57     {
58         //abc\n    --- a b c \n \0----
59         send(sockfd, buf, strlen(buf),  0);
60 
61         memset(buf, 0, sizeof(buf));
62         recv(sockfd, buf, N, 0);
63         printf("%s\n",  buf);
64 
65         printf(">");
66     }
67     close(sockfd);
68 
69     return 0;
70 }

 

posted on 2018-08-05 20:13  kingofloong  阅读(407)  评论(0)    收藏  举报