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 ;
}

最新文章

  1. js中array的filter用法
  2. U-Boot命令大全(功能参数及用法)
  3. 使用 CountDownLatch 控制多个线程执行顺序
  4. jquery的延迟加载插件Lazy Load Plugin for jQuery
  5. PHP学习笔记 - 进阶篇(2)
  6. YII千万级PV架构经验分享--俯瞰篇--业务扩展演变
  7. 鸟哥的linux私房菜——第12章 正则表达式与文件格式化处理
  8. opencv2对读书笔记——使用均值漂移算法查找物体
  9. python运维开发之第七天
  10. 查看ntp时间是否同步
  11. SpringBoot系列——i18n国际化
  12. 十三、事务、连接池 、ThreadLocal 、BaseServlet自定义Servlet父类 、 DBUtils &#224; commons-dbutils
  13. Behavior Tree 用 Lua 实现一个最简行为树
  14. [视频]K8飞刀 正则采集WordPress站点用户
  15. SpringMVC系列(十二)自定义拦截器
  16. 使用 PHP 框架 Yii 访问 MS SQL 的尝试
  17. HRBUST单词接龙
  18. HDU 1165 公式推导题
  19. 对正在运行的mysql进行监控
  20. SpringMVC学习记录六——异常定义和上传图片

热门文章

  1. 牛客练习赛13 A 幸运数字Ⅰ 【暴力】
  2. git错误收集总结
  3. python安装包的方式
  4. Idea 使用过程中遇到的问题记录
  5. EntityFramework 学习 一 Eager Loading
  6. 【转】BNF和EBNF的含义与用法
  7. node.js+express+jade系列一:session的使用
  8. jQuery Cloud Zoom:图片放大镜插件 破解插件
  9. 关于DLL调试的两个工具(dependency walker和dumpbin.exe)
  10. Oracle修改字段名、字段数据类型