Linux教材13.14代码测试

发布时间 2023-11-20 22:15:11作者: 20211115fyq

代码

server.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <arpa/inet.h>
 5 #include <sys/socket.h>
 6 #include <netinet/ip.h>
 7 #include <netinet/in.h>
 8 #define BUFLEN 256 // max length of buffer
 9 #define PORT 1234 // fixed server port number
10 char line[BUFLEN];
11 struct sockaddr_in me, client;
12 int sock, rlen, clen = sizeof(client);
13 int main()
14 {
15 printf("1. create a UDP socket\n");
16 sock = socket(AF_INET , SOCK_DGRAM, IPPROTO_UDP);
17 printf("2. fill me with server address and port number\n");
18 memset((char *)&me, 0, sizeof(me));
19 me.sin_family = AF_INET;
20 me.sin_port = htons(PORT);
21 me.sin_addr.s_addr = htonl(INADDR_ANY); // use localhost
22 printf("3. bind socket to server IP and port\n");
23 bind(sock, (struct sockaddr*)&me, sizeof(me));
24 printf("4. wait for datagram\n");
25 while(1){
26 memset(line, 0, BUFLEN);
27 printf("UDP server: waiting for datagram\n");
28 // recvfrom() gets client IP, port in sockaddr_in clinet
29 rlen=recvfrom(sock,line,BUFLEN,0,(struct sockaddr *)&client,&clen);
30 printf("received a datagram from [host:port] = [%s:%d]\n",
31 inet_ntoa(client.sin_addr), ntohs(client.sin_port));
32 printf("rlen=%d: line=%s\n", rlen, line);
33 printf("send reply\n");
34 sendto(sock, line, rlen, 0, (struct sockaddr*)&client, clen);
35 }
36 }

client.c

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #include<sys/socket.h>
 5 #include <netinet/ip.h>
 6 #include <arpa/inet.h>
 7 #define SERVER_HOST "127.0.0.1" // default server IP: localhost
 8 #define SERVER_PORT 1234 // fixed server port number
 9 #define BUFLEN 256 // max length of buffer
10       char line[BUFLEN];
11       struct sockaddr_in server;
12       int sock, rlen, slen=sizeof(server);
13 int main(){
14       printf("1. create a UDP socket\n");
15       sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
16       printf("2. fill in server address and port number\n");
17       memset((char *) &server, 0, sizeof(server));
18       server.sin_family = AF_INET;
19       server.sin_port = htons(SERVER_PORT);
20       inet_aton(SERVER_HOST, &server.sin_addr);
21       while(1){
22             printf("Enter a line : ");
23             fgets(line, BUFLEN, stdin);
24             line[strlen(line)-1] = 0;
25             printf("send line to server\n");
26             sendto(sock,line,strlen(line),0,(struct sockaddr *)&server,slen);
27             memset(line, 0, BUFLEN);
28             printf("try to receive a line from server\n");
29             rlen=recvfrom(sock,line,BUFLEN,0,
30             (struct sockaddr*)&server,&slen);
31             printf("rlen=%d: line=%s\n", rlen, line);
32             }
33 }

运行结果截图

 

 

 server.c代码中的宏定义

#define BUFLEN 256 // 缓冲区最大长度
#define PORT 1234 //  固定服务器端口

client.c代码中的宏定义