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. RAID与磁盘管理之——综合应用

    为了实现磁盘的管理和RAID的综合,现将四块硬盘组合成一个RAID10,并在此基础之上创建物理卷.卷组.逻辑卷,实现在线扩容,最后挂载使用. 其中也部分包含了swap分区的创建和使用. 1.根据lin ...

  2. postProcessBeanFactory方法源码跟踪

    看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractApplic ...

  3. eshop7-mysql

    1. Mysql 安装 执行 yum -y install mysql-server 注意:(1)是否使用sudo 权限执行请根据您具体环境来决定 (2)检查是否已经安装mysql-server rp ...

  4. navicat报错2005 - Unknown MySQL server host 'localhost' (0) 原因及解决方法

    报错原因:没有连接互联网,用navicat连接本地mysql数据库,连接属性ip为localhost. 解决办法:将ip改为127.0.0.1即可.localhost是需要DNS解析后才会是127.0 ...

  5. Linux服务器命令大全

    快捷提示键: table 查看文件夹:  ls , ls –all ,ls –l,ll 进入某个文件夹: cd usr/local 回到root 目录 : cd /root/ 回到根目录:cd / 回 ...

  6. 20200119日志 EPLAN高压房 VFD 单线图 心得

    提纲: EPLAN 画单线图的方法,可以先绘制原理图,然后在一个柜子里面的器件 用方框圈起来.方框名称一样.注意 一个工程里面的器件编号是唯一的. 断路器选型. PT 手车 接地刀作用     具体内 ...

  7. POJ 1852:Ants

    Ants Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11754   Accepted: 5167 Description ...

  8. sqlite if not exists应用实例

    INSERT or replace INTO [main].[RecordInfo]([WorkID],[bArtificialAttendance],[fThreshold],[Attendance ...

  9. SSM整合搭建过程中的一个怪异问题

    好久没有搭建框架了,昨天开始试图搭建一个SSM框架,各种配置文件搭建成功,服务器也启动正确,但是在运行过程中,发现总是不能获取JDBC,不能够创建连接池工厂,报错如下:网页报500错误码 SEVERE ...

  10. mybatis update set 多个字段

    <update id="updateCustomer" parameterType="com.entrym.domain.Customer"> UP ...