linux_c_udp_example
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的更多相关文章
随机推荐
- Largest Beautiful Number CodeForces - 946E (贪心)
题意:给定一个长度为偶数的数,输出小于它的最大的美丽数.如果一个数长度为偶数,且没有前导零,并存在一种排列是回文数的数为美丽数.给定的t个数长度总和不超过200000. 分析: 1.存在一种排列为回文 ...
- flutter之VSCode下Flutter常用终端命令行
https://www.cnblogs.com/lxlx1798/p/11049922.html 梁飞宇 [Flutter学习]之VSCode下Flutter常用终端命令行 Flutter 常用命令行 ...
- 吴裕雄--天生自然java开发常用类库学习笔记:集合工具类Collections
import java.util.Collections ; import java.util.List ; import java.util.Set ; public class Collectio ...
- Spring加载Properties配置文件的三种方式
一.通过 context:property-placeholder 标签实现配置文件加载 1) 用法: 1.在spring.xml配置文件中添加标签 <context:property-plac ...
- mpvue + Vant weapp + 微信云服务 打造小程序应用
写在前面的话: 从事小程序开发已经大半年的时间了,但是一直都是再用原生写项目.一直想着用框架自己写一个小程序,但苦于一直没有时间.正好最近项目搁置,有了空闲时间,就研究了下mpvue + Vant w ...
- postman带上token对接口进行测试
根据验证码进行登陆,登录之后返回token.然后请求其他接口时在header头中带上token访问其他接口进行测试 账户信息输入验证码 登陆成功,看到返回的token 我们这个项目可以刷新一下toke ...
- centos6.5搭建hadoop单节点
1.添加用户 groupadd hadoop useradd -d /home/hadoop -m hadoop -g hadoop passwd hadoop 修改密码 付给用户sudo权限 ...
- SpringMVC原理及流程解析
前言 春节期间宅在家里闲来无事,对SpringMVC进行了比较深入的了解,将之前模糊不清的地方基本摸索清楚了,特此撰文总结记录一下. 正文 一.一个请求为什么会调用到SpringMVC框架里? 首先问 ...
- pandas中na_values与keep_default_na
我们在使用pandas读取文件时,常会遇到某个字段为NaN. 一般情况下,这时因为文件中包含空值导致的,因为pandas默认会将 '-1.#IND', '1.#QNAN', '1.#IND', '-1 ...
- 112-PHP类变量之间的赋值标识为同一个对象(二)
<?php class mao{ //定义猫类 public $age=0; //定义多个属性并初始化 public $weight=50; public $color='white'; } $ ...