首页
最新活动
服务器租用
香港服务器租用
台湾服务器租用
美国服务器租用
日本服务器租用
新加坡服务器租用
高防服务器
香港高防服务器
台湾高防服务器
美国高防服务器
裸金属
香港裸金属服务器
台湾裸金属服务器
美国裸金属服务器
日本裸金属服务器
新加坡裸金属服务器
云服务器
香港云服务器
台湾云服务器
美国云服务器
日本云服务器
CDN
CDN节点
CDN带宽
CDN防御
CDN定制
行业新闻
官方公告
香港服务器资讯
帮助文档
wp博客
zb博客
服务器资讯
联系我们
关于我们
机房介绍
机房托管
登入
注册
帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
联系客服
服务器资讯
/
香港服务器租用
/
香港VPS租用
/
香港云服务器
/
美国服务器租用
/
台湾服务器租用
/
日本服务器租用
/
官方公告
/
帮助文档
udp服务器【Linux网络编程】
发布时间:2024-03-07 03:48:10 分类:帮助文档
udp服务器【Linux网络编程】 目录 一、UDP服务器 1、创建套接字 2、绑定套接字 3、运行 1)读取数据 2)发送数据 二、UDP客户端 创建套接字: 客户端不用手动bind 收发数据 处理消息和网络通信解耦 三、应用场景 1、服务端执行命令 2、Windows上的客户端 3、简易聊天室 四、可能遇到的问题 一、UDP服务器 1、创建套接字 int socket(int domain,int type,int protocol) 第一个参数表示要创建的套接字的协议家族和域是什么,如下图第一个表示本地通信,第二个表示IPv4的网络通信。 AF_INET也可以写成PF_INET 第二个参数表socket的类型: SOCK_STREAM:流式套接字(面向字节流eg:TCP) SOCK_DGRAM:数据报套接字(面向数据报eg:UDP) 第三个参数表示协议类型:填0就行 返回值:文件描述符(网卡设备) 2、绑定套接字 int bind(int sockfd,const struct sockaddr *add,socklen_t addrlen) 关于第二个参数:由于是网络通信,所以我们要先定义一个sockaddr_in(#include
)对象,并把它的值填好。 将指定大小的数据清0 整数ip和字符串ip如何转换? 同时,ip也得是网络字节序。 inet_addr():将字符串ip转整数并保证其时网络字节序。 有了上面两个部分,服务器就初始化成功了。 3、运行 服务器要一直运行。 客户端将数据发送给服务器后,服务器进行处理,再将数据返回给客户端。 1)读取数据 sockfd是接收方的套接字描述符 buf是用来接收数据的。 src_addr是用来接收发送方的信息的。 flags设置为0即可 2)发送数据 sockfd:发送方套接字描述符 buf:指向要发送的数据的缓冲区 len:缓冲区大小 flags:0 dest_addr:接收方结构体指针 addrlen:结构体大小 通过指令判断服务器是否启动 一个关于IP的问题 如果我们用自己的云服务器IP来初始化服务器,会出现以下报错: 云服务器禁止直接绑定公网IP。一般服务器也不会固定绑定一个IP,因为每台机器可能有多个IP,多个IP都可以放出去,如果服务器只绑定一个IP,那就只能收到发往这一个IP的消息。 bind不填IP地址,就写0(任意地址绑定),让它根据端口号向上交付,这样就可以接收本台主机发给多个IP的消息。 所以,服务器就不需要ip这个字段了。 一个关于端口号的问题 【0,1023】:是系统内定的端口号,一般都有固定的应用层协议使用(http:80 https:443)我们要用1024及以上的端口号,同时,即便是1024以上,某些特定端口号也建议不要使用,如mysql:3306…… 用命令行: 下面是将服务器处理数据的部分分离出来的过程: 好处:代码分层,上层就不用关心网络通信了。 二、UDP客户端 创建套接字: 客户端不用手动bind 服务器的端口号必须是确定的(因为客户端要知道服务器的IP和端口号),而客户端只要保证唯一性就行。 用户需要传入服务器的ip和port 收发数据 因为客户端有可能向多个服务器发起请求,那么就会有多个服务器发来响应报文,所以接收消息时,需要知道是谁发来的。 处理消息和网络通信解耦 function是C++内置的函数对象,上面这行代码定义了一个类型,func_t即一个返回值为string,参数为const string &的函数,func_t可以作为参数类型,即可将这样的一个函数作为参数传递。 也可以这样写: 三、应用场景 1、服务端执行命令 1)建立管道 2)创建子进程,让子进程程序替换执行command 补充:127.0.0.1是本地环回地址(走了底层的网络协议栈,但并不推送到网络),通常同来进行客户端和服务器的测试 2、Windows上的客户端 注意:WinSock2.h要在Windows.h之前 后面的代码与Linux上基本类似 3、简易聊天室 理论上是要写一个注册登录的操作的,但此处为了方便,我们就直接用ip来标识每个人 如果没有出现过这个ip,就将这个client添加到unordered_map里(相当于进群) 将消息广播: udp的socket是全双工的,允许被同时读写 下面就来验证一下: 之前写的客户端是要发一条消息,才会收到消息,这样其实就不符合我们平时群聊的逻辑,接下来用多线程改一下: 两个线程,一个收,一个发 线程要用的数据: 补充:关于inet_ntoa char* inet_ntoa(struct in_addr inaddr); 这个函数返回了一个char*, 很显然是这个函数自己在内部为我们申请了一块内存来保存ip的结果,man手册上说, inet_ntoa函数, 是把这个返回结果放到了静态存储区. 这个时候不需要我们手动进行释放。 但如果我们多次调用这个函数,结果会出现覆盖的情况: 在AUPE中说这个函数不是线程安全的函数,但在centos7上测试没有出现问题,可能是其内部加了互斥锁,因此推荐使用以下函数: const char* inet_ntop(int family,const void *addrptr,char* strptr,size_t len); 四、可能遇到的问题 1、云服务器要设置安全组,开发端口号 2、登录xshell时的ip是虚拟ip,要用ifconfig指令查真正的ip
上一篇
云存储服务器租用多少钱
下一篇
成都公司服务器租用多少钱
相关文章
服务器与电脑的区别
2024年幻兽帕鲁如何联机,如何搭建幻兽帕鲁服务器
e5 2450l cpu怎么样
服务器买回来怎么用
【Linux】进程间通信(万字详解)—— 匿名管道 - 命名管道 - System V - 共享内存
【java】项目部署liunx服务器的简单步骤
阿里云怎么获得备案号
百度云怎么搞无限空间
OpenWRT好用的插件
香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价
7*24H在线售后
高可用资源,安全稳定
1v1专属客服对接
无忧退款试用保障
德讯电讯股份有限公司
电话:00886-982-263-666
台湾总部:台北市中山区建国北路一段29号3楼
香港分公司:九龙弥敦道625号雅兰商业二期906室
服务器租用
香港服务器
日本服务器
台湾服务器
美国服务器
高防服务器购买
香港高防服务器出租
台湾高防服务器租赁
美国高防服务器DDos
云服务器
香港云服务器
台湾云服务器
美国云服务器
日本云服务器
行业新闻
香港服务器租用
服务器资讯
香港云服务器
台湾服务器租用
zblog博客
香港VPS
关于我们
机房介绍
联系我们
Copyright © 1997-2024 www.hkstack.com All rights reserved.