首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UDP协议 sendto 和 recvfrom 浅析与示例

UDP通信的过程如图所示:     服务端:       (1)使用函数socket(),生成套接字文件描述符;       (2)通过struct sockaddr_in 结构设置服务器地址和监听端口...;       (3)使用bind() 函数绑定监听端口,将套接字文件描述符和地址类型变量(struct sockaddr_in )进行绑定;       (4)接收客户端的数据,使用recvfrom(...) 函数接收客户端的网络数据;       (5)向客户端发送数据,使用sendto() 函数向服务器主机发送数据;       (6)关闭套接字,使用close() 函数释放资源;     客户端:...,失败返回-1,错误原因会存于errno 中。   ...,失败返回-1,错误原因会存于errno 中。

1.2K10

基于UDP的服务器端客户端

当然,bind函数不区分TCP和UDP。另外调用sendto函数时尚未分配地址信息,则在首次调用sendto函数时给相应套接字自动分配IP地址和端口。而且此时分配的地址一直保留到程序结束为止。...因此也可用来与其他UDP套接字进行数据交换,当然IP用主机IP,端口号选尚未使用的任意端口号。综上所述,调用sendto函数时自动分配IP和端口号,因此UDP客户端中通常无需额外的地址分配过程。...已连接(connected)UDP套接字与未连接(unconnected)UDP套接字 TCP套接字中需注册待传输数据的目标IP和端口号,而UDP中则无需注册。...因此,通过sendto函数传输数据的过程大致可分为以下三个阶段: 第一阶段:向UDP套接字注册目标IP和端口号 第二阶段:传输数据 第三阶段:传输UDP套接字中注册的目标地址信息 每次调用sendto函数时重复上述过程...这种未注册目标地址信息的套接字称为未连接套接字,反之,注册了目标地址的套接字称为连接connected套接字。显然,UDP套接字默认属于未连接套接字。

2.6K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    UDP服务端和客户端通信代码开发流程

    不可靠,不安全的数据报传递=---更像是收发短信,UDP传输不需要建立连接,传输效率更高,在稳定的局域网内部环境相对可靠 UDP通信相关函数介绍 接收信息函数 ssize_t recvfrom(int...buf 要接受的缓冲区 len 缓冲区的长度 flags 标志位 一般填0 src_addr 原地址 传出参数 addrlen 发送方地址长度 返回值 成功: 返回读到的字节数 失败:...dest_addr 目的地址 addrlen 目的地址长度 返回值 成功: 返回写入的字节数 失败: 返回-1,设置errno 二、UDP服务端和客户端开发流程 1.服务端开发流程 (1...) 创建socket (man 7 udp) udp_socket = 套接字(AF_INET,SOCK_DGRAM,0); SOCK_DGRAM:面向无连接,不安全,不可靠,的数据报传输 (2) 绑定...) udp_socket = 套接字(AF_INET,SOCK_DGRAM,0); (2) 而 (1)      {               //发送数据               sendto(

    61030

    基于udp的socket编程 c语言_C语言编程游戏

    (1)建立套接字文件描述符,使用函数socket(),生成套接字文件描述符。 (2)设置服务器地址和侦听端口,初始化要绑定的网络地址结构。...(3)绑定侦听端口,使用bind()函数,将套接字文件描述符和一个地址类型变量进行绑定。 (4)接收客户端的数据,使用recvfrom()函数接收客户端的网络数据。...(5)向客户端发送数据,使用sendto()函数向服务器主机发送数据。 (6)关闭套接字,使用close()函数释放资源。...UDP协议的客户端流程 UDP协议的客户端流程 UDP协议的客户端流程分为套接字建立、设置目的地址和端口、向服务器发送数据、从服务器接收数据、关闭套接字等5个部分。...流程如下: (1)建立套接字文件描述符,socket(); (2)设置服务器地址和端口,struct sockaddr; (3)向服务器发送数据,sendto(); (4)接收服务器的数据,recvfrom

    18.3K10

    Linux下网络编程-UDP协议探测在线好友

    在Linux下使用socket创建UDP的套接字时,属性要选择数据报类型SOCK_DGRAM。 sockfd=socket(AF_INET,SOCK_DGRAM,0); 2....UDP协议发送和接收数据的函数 2.1 recvfrom函数 UDP使用recvfrom()函数接收数据,他类似于标准的read(),但是在recvfrom()函数中要指明数据的目的地址。...2.2 sendto函数 UDP使用sendto()函数发送数据,他类似于标准的write(),但是在sendto()函数中要指明目的地址。...尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。选项影响套接口的操作,诸如加急数据是否在普通数据流中接收,广播数据是否可以从套接口发送等等。...案例: 使用UDP协议探测在线好友 前面几篇文章介绍了Linux下TCP协议设计的群聊天室的一个程序,如果想要知道同一个网络下有多少好友在线,就可以使用UDP协议进行广播探测。

    2.2K30

    socket:Python实现UDP客户和服务器通信

    前言 前文使用TCP面向流的套接字,今天讲解的UDP的工作方式与TCP/IP不同。UDP是用户数据报协议,是一个面向消息的协议。...一方面,UDP不需要一个长期活动连接,所以建立UDP套接字稍微简单一些。另一方面,UDP消息必须放在一个数据报中。 在IPv4中,数据报包含65507个字节,这些字节信息中还包括首部信息。...它只需要使用bing()将其套接字与一个端口关联,然后等待各个消息。...-8'), address) if data: sent = sock.sendto('已接收到你发来的消息'.encode('UTF-8'), address) 其中,recvfrom...客户端代码 客户端当然比服务器更简单,因为UDP不需要连接,可以直接将消息发送到服务器,并使用recvfrom()响应。

    55840

    UDP通信机制详解

    UDP通信流程如下: 服务器端: 创建套接字 - socket 第二个参数使用SOCK_DGRAM,表示报式协议,即UDP。TCP使用的是SOCK_STREAM。...:0 dest_addr:另一端的IP和端口 addrlen:dest_addr长度 UDP服务器端:需要一个套接字, 通信 客户端: 创建一个用于通信的套接字:socket 通信 发送数据:sendto...,如果发送的数据太大,sendto会调用失败,UDP报文的长度是有上限的。...关闭通信的套接字 重连 重新初始套接字 继续发送心跳包 乒乓包 比心跳包携带的数据多一些 除了知道连接是否存在,还能获取一些信息 如何理解心跳包呢——比如说,坐火车过隧道的时候,微信会提示服务器已断开连接...TCP/UDP应用场景 TCP使用场景 对数据安全性要求高的时候 登录数据的传输 —— 比如用户名密码 文件传输 HTTP协议 传输层协议 —— TCP UDP使用场景 效率高 —— 实时性要求比较高

    17610

    【Linux网络编程】Socket编程--UDP(第一弹):实现客户端和服务器互相发送消息

    简单的回显服务器和客户端代码 Udp Server socket套接字创建 #include #include int socket(int domain...) int type:指定套接字的类型 SOCK_STREAM: 提供可靠的、面向连接的字节流(TCP) SOCK_DGRAM: 提供不可靠的、无连接的数据报(UDP) SOCK_RAW:...这个文件描述符可以用于后续的套接字操作(如 bind、listen、accept 等)。 失败时,返回 -1,并设置 errno 来指示错误原因。...,该对象中有四个字段,如下: 需要对前三个字段进行设置,sin_family 的值和 socket 函数中的 domain 参数保持一致;sin_por是端口信息,由于是在网络中通信,需要将主机转换成网络序列...如果目标是 UDP 套接字,必须指定目标地址。 addrlen:指向一个 socklen_t 类型的变量,表示 dest_addr 指向的结构的大小。

    19110

    send()、sendto()和recv()、recvfrom()的使用

    udp通讯中的sendto()需要在参数里指定接收方的地址/端口,recvfrom()则在参数中存放接收发送方的地址/端口,与之对应的send()和recv()则不需要如此,但是在调用send()之前,...(这些内容前面文章udp通讯中的connect()和bind()函数 有详细讲过) 这4个函数的使用比较简单,但在一个实例中,遇到一个小问题。...实现功能: udp服务器创建一个套接字接收客户端的连接,连接成功后,服务器再创建一个套接字与客户端进行数据交互,要求尽量使用connect()和recv()、send()函数。...connect()函数为该套接字指定目标地址信息,这个目标地址信息虽然确实是客户端的,但是客户端的目标地址却是服务器,那么服务器新的套接字的目标地址不是客户端而是服务器,所以服务器发出的数据还是自己收到...,但是注意,客服端创建完套接字后不能马上为其connect()以指定目的地址信息,那么就发数据给服务器时就要使用sendto()、接收数据则是用recvfrom(),流程图改为: 客户端代码实现为

    1.8K20

    Linux网络-TCPUDP套接字编程

    零、前言 本章主要是对套接字网络编程的一个学习,目标是能够基本的进行套接字编程 一、UDP套接字 1、创建套接字 无论是服务端还是客户端,进行网络编程需要做的第一件事就是创建套接字 socket...类型) UDP是数据报式套接字,并不会管对端的接收转态,只要绑定后就可以向对端进行接收消息了,但是这样的传输实际中是存有风险的 示例:服务端 //创建套接字结构体-填入ip及port struct...,即sendto的最后两个参数用来表示对端的信息 recvfrom函数函数原型: ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags...-1,同时错误码会被设置 注:因为TCP是面向链接的,每一个读写的套接字文件都已经确立了对应的链接对象,所以这里的recv和send并不用像UDP的recvfrom和sendto那样指定对端的网络信息...注意: 一般来说 send(),recv()用于TCP,sendto()及recvfrom()用于UDP sendto可以在参数中指定发送的目标地址 , sendto可用于无连接的socket,send

    3.7K10

    UNPv1第八章:基本UDP套接口编程

    函数recvfrom用数据报发送者的协议地址装填由from所指的套接口地址结构,存储在此套接口地址结构中的字节数也以addrlen所指的整数返回给调用者。...对于已连接UDP套接口,与缺省的未连接套接口相比,发生了三个变化: 1).我们再也不能给输出操作指定IP和端口号,也就是说我们不使用sendto,而改用write或send,写到已连接UDP套接口上的任何内容都自动发送到由...connect指定的协议地址(例如IP地址和端口号) 2).我们不必使用recvfrom以获悉数据报的发送者,而改用read,recv或recvmsg,在一个已连接UDP套接口上由内核为输入操作返回的数据报仅仅是那些来自...3).由已连接的UDP套接口引发的异步错误返回给他们所在的进程,而未连接UDP套接字不接受任何异步错误。...拥有一个已连接的UDP套接字的进程出于下列目的再次调用connect (1)指定新的IP地址和端口号 (2)断开套接口 第一个目的(即给一个已连接UDP套接口指定新的对端)不同于TCP套接口中

    73440

    UDP-用户数据报协议1.介绍2.udp网络程序-发送数据udp网络程序-发送、接收数据echo服务器广播用代码给飞秋发信息收消息_没绑定端口号收消息_绑定端口多线程聊天

    UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。...特点:UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。...通信协议族 函数socket()的参数type用于设置套接字通信的类型,主要有SOCKET_STREAM(流式套接字)、SOCK——DGRAM(数据包套接字)等。...udp网络程序-发送、接收数据 from socket import * #1. 创建套接字 udpSocket = socket(AF_INET, SOCK_DGRAM) #2....比如飞秋,使用的是udp协议,在此基础上包装成了IPMSG协议。

    1.4K40

    【计网】UDP Echo Server与Client实战:从零开始构建简单通信回显程序

    该函数返回一个套接字文件描述符,如果创建失败则返回-1。...AF_INET表示使用IPv4地址,它是Internet地址族的简写。 SOCK_DGRAM:这是socket()函数的第二个参数,指定了套接字类型。...SOCK_DGRAM表示数据报套接字,这是一种无连接的、固定最大长度的消息服务。它常用于UDP(用户数据报协议)通信。 0:这是socket()函数的第三个参数,通常用于指定协议。...我们要让server先收数据 recvfrom 函数 用于从一个套接字(由 _sockfd 标识)接收数据。...recvfrom函数,从socket文件中获取数据,并可以得到发送者的信息 sockfd:从指定的socket文件中读取数据 buf:缓冲区,将数据读取到这里 len:缓冲区的长度 src_addr:输出型参数

    15210

    【Linux网络编程】Socket编程--UDP:实现服务器接收客服端的消息

    简单的回显服务器和客户端代码 Udp Server socket套接字创建 #include #include int socket(int domain...) 图片 int type:指定套接字的类型 SOCK_STREAM: 提供可靠的、面向连接的字节流(TCP) SOCK_DGRAM: 提供不可靠的、无连接的数据报(UDP) SOCK_RAW: 提供原始套接字...这个文件描述符可以用于后续的套接字操作(如 bind、listen、accept 等)。 失败时,返回 -1,并设置 errno 来指示错误原因。...,该对象中有四个字段,如下: 图片 需要对前三个字段进行设置,sin_family 的值和 socket 函数中的 domain 参数保持一致;sin_por是端口信息,由于是在网络中通信,需要将主机转换成网络序列...如果目标是 UDP 套接字,必须指定目标地址。undefined addrlen:指向一个 socklen_t 类型的变量,表示 dest_addr 指向的结构的大小。

    13610

    Socket Sendto 可以传入不同的目的地址吗

    1 前言 通常我们认为 socket 中 地址信息 和 socket句柄 是一一对应的,不能往一个socket句柄中,传入不同的地址信息。 但真是这样的吗? 咨询了一些朋友,有两种答案。...这样看来,sendto可以使用无连接模式的socket,来处理不同地址的信息。 3 XTI 中的介绍 查找过程中,还看到了XTI,做个知识补充。...对于UDP套接字,虽然可以使用连接,但通常不希望这样做,因为这会限制您每个套接字使用一个对等端。...相反,您希望在sendto和recvfrom系统调用的每个对等方中使用单个未连接的UDP套接字,以便为每个数据包发送和接收具有不同地址的数据包。...使用单个套接字时,不需要使用select或poll进行复用 - 只需调用recvfrom即可从任何源获取下一个数据包。当你得到一个数据包时,你也可以得到对方地址来发送数据包(返回)。

    1.8K21

    百问FB网络编程 - 主要函数介绍

    listen函数将bind的文件描述符变为监听套接字。 成功是返回0,失败的情况和socket一样,返回 -1。...accept调用时,服务器端的程序会一直阻塞到有一个客户程序发出了连接。 accept成功时返回最后的服务器端的文件描述符,这个时候服务器端可以向该描述符写信息了,失败时返回-1 。...返回值:平时会阻塞,有数据就返回实际接收到了多少个数据 ​ if(iRecvLen <= 0) // 则表示出错了 6.3.8 recvfrom函数(UDP) 【没有数据会休眠】 ssize_t recvfrom...通常用于【无连接】套接字,因为此函数可以获得发送者的地址。...sockaddr *dest_addr, socklen_t addrlen); sendto和send相似,区别在于sendto允许在无连接的套接字上指定一个目标地址。

    7410
    领券