udp_server

 #include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <stdio.h> #define BUF_SIZE 30 void err_handler(char *msg); int main(int argc, char **argv) { int srv_sock;
char msg[BUF_SIZE];
int str_len;
socklen_t cli_adr_sz; struct sockaddr_in srv_addr, cli_addr;
if (argc != ) {
printf("Usage : %s <port>\n", argv[]);
exit();
}
srv_sock = socket(PF_INET, SOCK_DGRAM, );
if (srv_sock == -) {
err_handler("UDP socket() error");
}
memset(&srv_addr, , sizeof(srv_addr));
srv_addr.sin_family = AF_INET;
srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
srv_addr.sin_port = htons(atoi(argv[])); if (bind(srv_sock, (struct sockaddr *) &srv_addr, sizeof(srv_addr)) == -) {
err_handler("bind() error");
} while () {
cli_adr_sz = sizeof(cli_addr);
str_len = recvfrom(srv_sock, msg, BUF_SIZE, , (struct sockaddr *) &cli_addr, &cli_adr_sz);
sendto(srv_sock, msg, str_len, , (struct sockaddr *) &cli_addr, cli_adr_sz);
printf("recv and send ...\n");
} close(srv_sock);
return ;
} void err_handler(char *msg) {
fputs(msg, stderr);
fputc('\n', stderr);
exit();
}

udp_client

 #include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <stdio.h> #define BUF_SIZE 30 void err_handler(char *msg); int main(int argc, char **argv) { int sock;
char msg[BUF_SIZE];
int str_len;
socklen_t adr_sz; struct sockaddr_in srv_addr, from_addr;
if (argc != ) {
printf("Usage : %s <IP> <PORT>\n", argv[]);
exit();
} sock = socket(PF_INET, SOCK_DGRAM, );
if (sock == -) {
err_handler("socket() error");
} memset(&srv_addr, , sizeof(srv_addr));
srv_addr.sin_family = AF_INET;
srv_addr.sin_addr.s_addr = inet_addr(argv[]);
srv_addr.sin_port = htons(atoi(argv[])); while () {
fputs("Input msg(Q to quit):", stdout);
fgets(msg, BUF_SIZE, stdin);
if (!strcmp(msg, "q\n") || !strcmp(msg, "Q\n")) {
break;
}
sendto(sock, msg, strlen(msg), , (struct sockaddr *) &srv_addr, sizeof(srv_addr));
adr_sz = sizeof(from_addr);
str_len = recvfrom(sock, msg, BUF_SIZE, , (struct sockaddr *) &srv_addr, &adr_sz);
msg[str_len] = ;
printf("Msg form srv : %s", msg);
}
close(sock);
return ;
} void err_handler(char *msg) {
fputs(msg, stderr);
fputc('\n', stderr);
exit();
}

build

gcc -o usrv udp_srv.c -g -Wall
gcc -o ucli udp_cli.c -g -Wall

linux_c_udp_example的更多相关文章

随机推荐

  1. postgres 删除外部表

    drop external table if exists tableName;

  2. PAT (Advanced Level) 1128~1131:1128N皇后 1129 模拟推荐系统(set<Node>优化) 1130 中缀表达式

    1128 N Queens Puzzle(20 分) 题意:N皇后问题.按列依次给定N个皇后的行号,问N个皇后是否能同时不存在行冲突.列冲突和主副对角线冲突. 分析: 1.根据题意一定不存在列冲突,所 ...

  3. 用 k8s 管理机密信息【转】

    应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 Secret. Secret 会以密文的方式存储 ...

  4. 文本处理三剑客与shell正则表达式

    文本处理三剑客 提到对于文本的处理上,除了vim这个强大的编辑器之外,还有使用命令的形式去处理你要处理的文本,而不需要手动打开文本再去编辑.这样做的好处是能够以shell命令的形式将编辑和处理文本的工 ...

  5. Vulkan SDK Demo 之一 熟悉

    DiligentEngine的API是D3d11和D3D12风格的,vulkan也被封装成了这种风格的API. 在了解Diligent Engine是如何对vulkan进行封装之前,我准备先学习下Vu ...

  6. SpringMVC 文件的上传、下载

    文件上传 (1)下载添加2个jar包 commons-fileupload.jar commons-io.jar SpringMVC的文件上传依赖于Apache的FileUpload组件,需要下载添加 ...

  7. 027、Java中的转义字符

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  8. UCENTER同步登录工作原理和配置要点

    ucenter的同步登录原理: 1)Ucenter是和uc_client同步的.每个PHP应用,加入了UCENTER后,都会在主目录下有个UC_CLIENT目录.这个目录里,都有一个client.PH ...

  9. 微信access_token设计的原理解析

    1.access_token是加密的字符串,其目的是为了接口安全考虑,不然随便就能调用微信服务器的接口会有很大风险. 2.用户在公众号中填写的Token就相当于本项目中的xiaoming,是签名验证中 ...

  10. 京东首页如何实现pc端和移动端加载不同的html的?

    进入www.jd.com后代码判断是手机的话就跳转m.jd.com let ua = window.navigator.userAgent.toLocaleLowerCase() let murl = ...