学习UDP
参考博客:https://www.cnblogs.com/skyfsm/p/6287787.html
简单编写了 udp的小程序,udp_client 端通过终端输入字符,然后发送给udp_server。udp_server 接收到后,给udp_client一个响应。
//socket udp 客户端
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h> int main()
{
//创建socket对象
int sockfd=socket(AF_INET,SOCK_DGRAM,);
if(- == sockfd)
{
printf("socket failed.\n");
} //创建网络通信对象
struct sockaddr_in ser_addr;
memset(&ser_addr, , sizeof(ser_addr));
ser_addr.sin_family =AF_INET;
ser_addr.sin_port = htons();//htons(1324);
ser_addr.sin_addr.s_addr = inet_addr("192.168.7.224"); // inet_addr("127.0.0.1"); while()
{
printf("Please input a char:");
char cChar;
int num = ;
char buf[];
scanf("%c",&cChar);
getchar();
num = sendto(sockfd, &cChar, sizeof(char), , (struct sockaddr*)&ser_addr, sizeof(ser_addr));
printf("client send %d bytes: %c.\n", num, cChar); memset(buf, , sizeof(buf));
num = recvfrom(sockfd,buf,sizeof(buf), , NULL, NULL);
printf("client recv %d bytes: %s.\n\n", num, buf);
} close(sockfd); }
//socket udp 服务端
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h> #define INVALID_VALUE -1
#define INVALID_SOCKET -1 int main()
{
int ret = -; //创建socket对象
int sockfd=socket(AF_INET,SOCK_DGRAM,); // AF_INET:IPV4;SOCK_DGRAM:UDP
if(INVALID_SOCKET == sockfd)
{
printf("socket failed.\n");
} //创建网络通信对象
struct sockaddr_in ser_addr;
bzero(&ser_addr, sizeof(ser_addr));
ser_addr.sin_family =AF_INET;
ser_addr.sin_port = htons(); //端口号,需要网络序转换
ser_addr.sin_addr.s_addr= htonl(INADDR_ANY); //IP地址,需要进行网络序转换,INADDR_ANY:本地地址 //绑定socket对象与通信链接
ret =bind(sockfd,(struct sockaddr*)&ser_addr,sizeof(ser_addr));
if(>ret)
{
printf("bind error \n");
return -;
} char buf[]; //接收缓冲区,1024字节
int count;
struct sockaddr_in clent_addr; //clent_addr用于记录发送方的地址信息
socklen_t len = sizeof(clent_addr);; while()
{
memset(buf, , sizeof(buf));
count = recvfrom(sockfd, buf, sizeof(buf), , (struct sockaddr*)&clent_addr, &len); //recvfrom是拥塞函数,没有数据就一直拥塞
printf("server recv %d bytes: %s \n",count, buf); memset(buf, , sizeof(buf));
snprintf(buf, sizeof(buf), "%s %d %s", "recive", count, "bytes");
printf("server send string:%s \n", buf);
sendto(sockfd, buf, sizeof(buf), , (struct sockaddr*)&clent_addr, len); //发送信息给client,注意使用了clent_addr结构体指针
} close(sockfd); return ;
}
学习UDP的更多相关文章
- lwip协议栈学习---udp
书籍:<嵌入式网络那些事-lwip协议> udp协议的优点: 1)基于IP协议,无连接的用户数据报协议,适用于传送大批量数据, 2)实时性比较高,适用于嵌入式网络 发送函数:udp_sen ...
- Netty 框架学习 —— UDP 广播
UDP 广播 面向连接的传输(如 TCP)管理两个网络端点之间的连接的建立,在连接的生命周期的有序和可靠的消息传输,以及最后,连接的有序终止.相比之下,类似 UDP 的无连接协议中则没有持久化连接的概 ...
- 最近在学习UDP方面的通信,找到一个很棒的博客
http://blog.csdn.net/kesalin/article/details/8798039
- Linux编程之UDP SOCKET全攻略
这篇文章将对linux下udp socket编程重要知识点进行总结,无论是开发人员应知应会的,还是说udp socket的一些偏僻知识点,本文都会讲到.尽可能做到,读了一篇文章之后,大家对udp so ...
- UDP和多线程服务器
UDP: UDP是数据报文传输协议,这个传输协议比较野蛮,发送端不需要理会接收端是否存在,直接就发送数据,不会像TCP协议一样建立连接.如果接收端不存在的话,发送的数据就会丢失,UDP协议不会去理会数 ...
- 【swoole】如何在docker+swoole环境下测试udp服务
前面几篇文章讲了使用 docker+swoole 环境来测试tcp服务以及如何测试,但是当我开始学习udp服务那块的时候,发现使用原来的方式在 docker+swoole 环境下行不通啦,后来发现如果 ...
- Python 网络通信协议 tcp udp区别
网络通信的整个流程 在这一节就给大家讲解,有些同学对网络是既熟悉又陌生,熟悉是因为我们都知道,我们安装一个路由器,拉一个网线,或者用无限路由器,连上网线或者连上wifi就能够上网购物.看片片.吃鸡了, ...
- 【转】Linux编程之UDP SOCKET全攻略
转自:http://www.cnblogs.com/skyfsm/p/6287787.html?utm_source=itdadao&utm_medium=referral 这篇文章将对lin ...
- 计算机网络课设之基于UDP协议的简易聊天机器人
前言:2017年6月份计算机网络的课设任务,在同学的帮助和自学下基本搞懂了,基于UDP协议的基本聊天的实现方法.实现起来很简单,原理也很简单,主要是由于老师必须要求使用C语言来写,所以特别麻烦,而且C ...
随机推荐
- PwniumCTF2014 - JJSN总结
Write-ups 本文最早发布在TSRC,详细地址:http://security.tencent.com/index.php/blog/msg/55 Forensics USB is FUN 这道 ...
- ajax实战用法详解
谦虚使人进步,总结使人提高! 以下5个方法执行一般Ajax请求的简短形式,在处理复杂的Ajax请求时应该使用jQuery.ajax() 1.load(url,[data],[callback])载入远 ...
- duilib进阶教程 -- 图片和文字的位置调整 (5)
已经有8个晚上没写教程啦,因为之后遇到了一些问题,主要是TreeView控件的问题,这个问题搞了几个晚上,然后还需要调试代码才能知道它的用法,虽然能够调试出来,但毕竟没什么含金量,只是重复劳动而已,相 ...
- [Full-stack] 网页布局艺术 - Less
故事背景 一个过程: template/html ----> css ----> less ----> bootstrap/flex ----> Semantic-ui fle ...
- [DLX精确覆盖] hdu 1603 A Puzzling Problem
题意: 给你n块碎片,这些碎片不能旋转.翻折. 问你能不能用当中的某些块拼出4*4的正方形. 思路: 精确覆盖裸题了 建图就是看看每一个碎片在4*4中能放哪些位置,这个就作为行. 列就是4*4=16个 ...
- TSPL学习笔记(1)
扩展语法(Syntactic extensions) 扩展语法就是通过核心语法或已经定义的扩展语法创建一种新的语法模式. Scheme核心语法模式包括: 顶层定义 常量 变量 过程应用 '(quote ...
- 【netcore基础】MVC API接口权限控制Attribute
效果: 通过Attribute来简单控制某个方法的访问权限 例如: 下面api只能角色id是[001,002,999]的登录用户才能访问 /// <summary> /// 管理用户列表 ...
- sencha touch 带本地搜索功能的selectfield(选择插件)
带本地搜索功能的选择插件,效果图: 在使用selectfield的过程中,数据过大时,数据加载缓慢,没有模糊查询用户体验也不好, 在selectfield的基础上上稍作修改而成,使用方式同select ...
- Unity3D 批处理场景的工具
//场景的批量处理器 public static class OperateScene { public const string SceneDir = "Assets/Scene/&quo ...
- 微信小游戏 RES版本控制+缓存策略 (resplugin和ResSplitPlugin插件使用)
参考: RES版本控制 使用 AssetsManager 灵活定制微信小游戏的缓存策略 一.我们的目标 目标就是让玩家快速进入游戏,然后根据游戏的进度加载相应的资源,并可对资源进行版本控制.本地缓存. ...