linux_c_udp_example
udp_server
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdlib.h> 2 #include <string.h> 3 #include <unistd.h> 4 #include <arpa/inet.h> 5 #include <sys/socket.h> 6 #include <stdio.h> 7 8 #define BUF_SIZE 30 9 10 void err_handler(char *msg); 11 12 int main(int argc, char **argv) { 13 14 int srv_sock; 15 char msg[BUF_SIZE]; 16 int str_len; 17 socklen_t cli_adr_sz; 18 19 struct sockaddr_in srv_addr, cli_addr; 20 if (argc != 2) { 21 printf("Usage : %s <port>\n", argv[0]); 22 exit(1); 23 } 24 srv_sock = socket(PF_INET, SOCK_DGRAM, 0); 25 if (srv_sock == -1) { 26 err_handler("UDP socket() error"); 27 } 28 memset(&srv_addr, 0, sizeof(srv_addr)); 29 srv_addr.sin_family = AF_INET; 30 srv_addr.sin_addr.s_addr = htonl(INADDR_ANY); 31 srv_addr.sin_port = htons(atoi(argv[1])); 32 33 if (bind(srv_sock, (struct sockaddr *) &srv_addr, sizeof(srv_addr)) == -1) { 34 err_handler("bind() error"); 35 } 36 37 while (1) { 38 cli_adr_sz = sizeof(cli_addr); 39 str_len = recvfrom(srv_sock, msg, BUF_SIZE, 0, (struct sockaddr *) &cli_addr, &cli_adr_sz); 40 sendto(srv_sock, msg, str_len, 0, (struct sockaddr *) &cli_addr, cli_adr_sz); 41 printf("recv and send ...\n"); 42 } 43 44 close(srv_sock); 45 return 0; 46 } 47 48 void err_handler(char *msg) { 49 fputs(msg, stderr); 50 fputc('\n', stderr); 51 exit(1); 52 }
udp_client
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdlib.h> 2 #include <string.h> 3 #include <unistd.h> 4 #include <arpa/inet.h> 5 #include <sys/socket.h> 6 #include <stdio.h> 7 8 #define BUF_SIZE 30 9 10 void err_handler(char *msg); 11 12 int main(int argc, char **argv) { 13 14 int sock; 15 char msg[BUF_SIZE]; 16 int str_len; 17 socklen_t adr_sz; 18 19 struct sockaddr_in srv_addr, from_addr; 20 if (argc != 3) { 21 printf("Usage : %s <IP> <PORT>\n", argv[0]); 22 exit(1); 23 } 24 25 sock = socket(PF_INET, SOCK_DGRAM, 0); 26 if (sock == -1) { 27 err_handler("socket() error"); 28 } 29 30 memset(&srv_addr, 0, sizeof(srv_addr)); 31 srv_addr.sin_family = AF_INET; 32 srv_addr.sin_addr.s_addr = inet_addr(argv[1]); 33 srv_addr.sin_port = htons(atoi(argv[2])); 34 35 while (1) { 36 fputs("Input msg(Q to quit):", stdout); 37 fgets(msg, BUF_SIZE, stdin); 38 if (!strcmp(msg, "q\n") || !strcmp(msg, "Q\n")) { 39 break; 40 } 41 sendto(sock, msg, strlen(msg), 0, (struct sockaddr *) &srv_addr, sizeof(srv_addr)); 42 adr_sz = sizeof(from_addr); 43 str_len = recvfrom(sock, msg, BUF_SIZE, 0, (struct sockaddr *) &srv_addr, &adr_sz); 44 msg[str_len] = 0; 45 printf("Msg form srv : %s", msg); 46 } 47 close(sock); 48 return 0; 49 } 50 51 void err_handler(char *msg) { 52 fputs(msg, stderr); 53 fputc('\n', stderr); 54 exit(1); 55 }
build
gcc -o usrv udp_srv.c -g -Wall
gcc -o ucli udp_cli.c -g -Wall
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 为DeepSeek添加本地知识库
· .NET程序员AI开发基座:Microsoft.Extensions.AI
· 精选4款基于.NET开源、功能强大的通讯调试工具
· 数据不出内网:基于Ollama+OneAPI构建企业专属DeepSeek智能中台
· 大模型工具KTransformer的安装