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的更多相关文章
随机推荐
- GNS3 模拟icmp记录路由
路由配置: icmp记录路由抓取出接口的IP地址,最多可以抓取9个.ip协议头中的options为40个字节 R1 : conf t int f0/0 no shutdown ip add 192.1 ...
- XV6源代码阅读-中断与系统调用
Exercise1 源代码阅读 1.启动部分: bootasm.S bootmain.c 和xv6初始化模块:main.c bootasm.S 由16位和32位汇编混合编写成的XV6引导加载器.boo ...
- [Luogu][P2458] [SDOI2006]保安站岗
题目链接 看起来似乎跟最小点覆盖有点像.但区别在于: 最小点覆盖要求所有边在其中,而本题要求所有点在其中. 即:一个点不选时,它的儿子不一定需要全选. 画图理解: 对于这样一幅图,本题中可以这样选择: ...
- python面试总结知识点
1.python中is和==的区别 Python中对象包含的三个基本要素,分别是:id(身份标识) .type(数据类型)和value(值). ‘==’比较的是value值 ‘is’比较的是id 2. ...
- 完全卸载(删除)mac下自带的php
/private/etc sudo rm -rf php-fpm.conf.defaultphp.ini php.ini.default /usr/bin sudo rm -rf php php-co ...
- JD-Store购物网站复盘——20170312
一.商店技术架构 1.主题 2.涉及技术点: 3.核心业务功能 4.角色 5.用户故事 二.实现步骤 专案基础设施 上传图片模块 购物车 订单 支付&寄信 专案源码 三.第三方服务应用 支付 ...
- Percona-Toolkit 之 pt-archiver 删除历史数据
pt-archiver是Percona-Toolkit工具集中的一个组件,是一个主要用于对MySQL表数据进行归档和清除工具.它可以将数据归档到另一张表或者是一个文件中.pt-archiver在清除表 ...
- 134-PHP子类重写父类方法,并调用父类方法
<?php class father{ //定义father类 public function method(){ //定义方法 echo '<br />father method' ...
- apache flink源码挖坑 (未完待续)
Apache Flink 源码解读(一) By yyz940922原创 项目模块 (除去.git, .github, .idea, docs等): flink-annotations: flink ...
- 六、React 键盘事件 表单事件 事件对象以及React中的ref获取dom节点 、React实现类似Vue的双向数据绑定
接:https://www.cnblogs.com/chenxi188/p/11782349.html 事件对象 .键盘事件. 表单事件 .ref获取dom节点.React实现类似vue双向数据绑定 ...