代码
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代码中的宏定义
#define SERVER_HOST "127.0.0.1" // 默认服务器IP地址
#define SERVER_PORT 1234 // 默认服务器端口号
#define BUFLEN 256 // 缓冲区最大长度