Linux教材13.15代码测试

发布时间 2023-11-24 15:45:50作者: 20211115fyq

代码

TCPserver.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <sys/socket.h>
 5 #include <netdb.h>
 6 #include <arpa/inet.h>
 7 #include <unistd.h>
 8 #define MAX 256
 9 #define SERVER_HOST "localhost"
10 #define SERVER_IP "127.0.0.1"
11 #define SERVER_PORT 1234
12 struct sockaddr_in server_addr, client_addr;
13 int mysock, csock; // socket descriptors
14 int r, len, n; // help variables
15 int server_init()
16 {
17 printf("================== server init ======================\n");
18 // create a TCP socket by socket() syscall
19 printf("1 : create a TCP STREAM socket\n");
20 mysock = socket(AF_INET, SOCK_STREAM, 0);
21 if (mysock < 0){
22 printf("socket call failed\n"); exit(1);
23 }
24 printf("2 : fill server_addr with host IP and PORT# info\n");
25 // initialize the server_addr structure
26 server_addr.sin_family = AF_INET; // for TCP/IP
27 server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // This HOST IP
28 server_addr.sin_port = htons(SERVER_PORT); // port number 1234
29 printf("3 : bind socket to server address\n");
30 r = bind(mysock,(struct sockaddr*)&server_addr,sizeof(server_addr));
31 if (r < 0){
32 printf("bind failed\n"); exit(3);
33 }
34 printf(" hostname = %s port = %d\n", SERVER_HOST, SERVER_PORT);
35 printf("4 : server is listening ....\n");
36 listen(mysock, 5); // queue length = 5
37 printf("=================== init done =======================\n");
38 }
39 int main()
40 {
41 char line[MAX];
42 server_init();
43 while(1){ // Try to accept a client request
44 printf("server: accepting new connection ....\n");
45 // Try to accept a client connection as descriptor newsock
46 len = sizeof(client_addr);
47 csock = accept(mysock, (struct sockaddr *)&client_addr, &len);
48 if (csock < 0){
49 printf("server: accept error\n"); exit(1);
50 }
51 printf("server: accepted a client connection from\n");
52 printf("-----------------------------------------------\n");
53 printf("Clinet: IP=%s port=%d\n",
54 inet_ntoa(client_addr.sin_addr),
55 ntohs(client_addr.sin_port));
56 printf("-----------------------------------------------\n");
57 // Processing loop: client_sock <== data ==> client
58 while(1){
59 n = read(csock, line, MAX);
60 if (n==0){
61 printf("server: client died, server loops\n");
62 close(csock);
63 break;
64 }
65 // show the line string
66 printf("server: read n=%d bytes; line=%s\n", n, line);
67 // echo line to client
68 n = write(csock, line, MAX);
69 printf("server: wrote n=%d bytes; ECHO=%s\n", n, line);
70 printf("server: ready for next request\n");
71 }
72 }
73 }

TCPclient.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <sys/socket.h>
 5 #include <netdb.h>
 6 #include <arpa/inet.h>
 7 #include <unistd.h>
 8 #define MAX 256
 9 #define SERVER_HOST "localhost"
10 #define SERVER_PORT 1234
11 struct sockaddr_in server_addr;
12 int sock, r;
13 int client_init()
14 {
15 printf("======= clinet init ==========\n");
16 printf("1 : create a TCP socket\n");
17 sock = socket(AF_INET , SOCK_STREAM, 0);
18 if (sock<0){
19 printf("socket call failed\n"); exit(1);
20 }
21 printf("2 : fill server_addr with server's IP and PORT#\n");
22 server_addr.sin_family = AF_INET;
23 server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // localhost
24 server_addr.sin_port = htons(SERVER_PORT); // server port number
25 printf("3 : connecting to server ....\n");
26 r = connect(sock,(struct sockaddr*)&server_addr, sizeof(server_addr));
27 if (r < 0){
28 printf("connect failed\n"); exit(3);
29 }
30 printf("4 : connected OK to\n");
31 printf("-------------------------------------------------------\n");
32 printf("Server hostname=%s PORT=%d\n", SERVER_HOST, SERVER_PORT);
33 printf("-------------------------------------------------------\n");
34 printf("========= init done ==========\n");
35 }
36 int main()
37 {
38 int n;
39 char line[MAX], ans[MAX];
40 client_init();
41 printf("******** processing loop *********\n");
42 while (1){
43 printf("input a line : ");
44 bzero(line, MAX); // zero out line[ ]
45 fgets(line, MAX, stdin); // get a line from stdin
46 line[strlen(line)-1] = 0; // kill \n at end
47 if (line[0]==0) // exit if NULL line
48 exit(0);
49 // Send line to server
50 n = write(sock, line, MAX );
51 printf("client: wrote n=%d bytes; line=%s\n", n, line);
52 // Read a line from sock and show it
53 n = read(sock, ans, MAX );
54 printf("client: read n=%d bytes; echo=%s\n", n, ans);
55 }
56 }

运行结果截图

 TCPserver.c中的宏定义

#define MAX 256  //最大长度
#define SERVER_HOST "localhost"   //服务器主机名
#define SERVER_IP "127.0.0.1"     //服务器IP地址
#define SERVER_PORT 1234          //服务器固定端口号

 TCPclient.c中的宏定义