步骤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 }
浙公网安备 33010602011771号