Linux UDP通信例子
2024-09-04 13:47:56
UDP C/S编程的步骤如下图所示
////server.c
#include <sys/types.h>
#include <sys/socket.h>
#include<pthread.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h> int main(int argc, char **argv)
{
if (argc != )
{
printf("Usage: %s port\n", argv[]);
exit();
}
printf("Welcome! This is a UDP server, I can only received message from client and reply with same message\n"); struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[]));
addr.sin_addr.s_addr = htonl(INADDR_ANY); int sock;
if ( (sock = socket(AF_INET, SOCK_DGRAM, )) < )
{
perror("socket");
exit();
}
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < )
{
perror("bind");
exit();
}
char buff[];
struct sockaddr_in clientAddr;
int n;
int len = sizeof(clientAddr);
while ()
{
n = recvfrom(sock, buff, , , (struct sockaddr*)&clientAddr, &len);
if (n>)
{
buff[n] = ;
printf("%s %u says: %s\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port), buff);
n = sendto(sock, buff, n, , (struct sockaddr *)&clientAddr, sizeof(clientAddr));
if (n < )
{
perror("sendto");
break;
}
}
else
{
perror("recv");
break;
}
}
return ;
}
///client.c
#include <sys/types.h>
#include <sys/socket.h>
#include<pthread.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h> int main(int argc, char **argv)
{
if (argc != )
{
printf("Usage: %s ip port", argv[]);
exit();
}
printf("This is a UDP client\n");
struct sockaddr_in addr;
int sock; if ( (sock=socket(AF_INET, SOCK_DGRAM, )) <)
{
perror("socket");
exit();
}
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[]));
addr.sin_addr.s_addr = inet_addr(argv[]);
if (addr.sin_addr.s_addr == INADDR_NONE)
{
printf("Incorrect ip address!");
close(sock);
exit();
} char buff[];
int len = sizeof(addr);
while ()
{
gets(buff);
int n;
n = sendto(sock, buff, strlen(buff), , (struct sockaddr *)&addr, sizeof(addr));
if (n < )
{
perror("sendto");
close(sock);
break;
}
n = recvfrom(sock, buff, , , (struct sockaddr *)&addr, &len);
if (n>)
{
buff[n] = ;
printf("received:");
puts(buff);
}
else if (n==)
{
printf("server closed\n");
close(sock);
break;
}
else if (n == -)
{
perror("recvfrom");
close(sock);
break;
}
} return ;
}
最新文章
- js中array的filter用法
- U-Boot命令大全(功能参数及用法)
- 使用 CountDownLatch 控制多个线程执行顺序
- jquery的延迟加载插件Lazy Load Plugin for jQuery
- PHP学习笔记 - 进阶篇(2)
- YII千万级PV架构经验分享--俯瞰篇--业务扩展演变
- 鸟哥的linux私房菜——第12章 正则表达式与文件格式化处理
- opencv2对读书笔记——使用均值漂移算法查找物体
- python运维开发之第七天
- 查看ntp时间是否同步
- SpringBoot系列——i18n国际化
- 十三、事务、连接池 、ThreadLocal 、BaseServlet自定义Servlet父类 、 DBUtils &#224; commons-dbutils
- Behavior Tree 用 Lua 实现一个最简行为树
- [视频]K8飞刀 正则采集WordPress站点用户
- SpringMVC系列(十二)自定义拦截器
- 使用 PHP 框架 Yii 访问 MS SQL 的尝试
- HRBUST单词接龙
- HDU 1165 公式推导题
- 对正在运行的mysql进行监控
- SpringMVC学习记录六——异常定义和上传图片