无连接(UDP)也可以调用send

在socket编程中,包括有连接和无连接两种方式,其流程如下:
有连接:
TCP客户端的流程一般是 socket-【bind】-connect-send/recv
无连接:
UDP客户端的流程一般是 socket-【bind】-sendto/recvfrom

send与sento相比,没有提供对方的地址,在有连接模式中, 连接已经事先建立好,当然不需要每次都提供对方地址。但是,即使在无连接模式中,当准备连接向同一个目标发送很多个报文时,每次都要提供对方的地址,这样 既麻烦又降低效率。其实可以简化一下,先预设一个对方地址,随后就采用send来发送,而不必都重复地提供相同的地址。事实上,对于无连接模式中,可以用 connect先设置一定对方地址,然后用send发送报文,而实际上每次都使用预先设置好的地方地址,但是,在无连接中使用connect和有连接中使 用connect有本质的区别,在无连接模式中,connect的作用只是让内核为本地插口记下预设的对方地址,而不涉及与对方之间控制报文的往返。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
udp_send是lwIP网络协议栈中用于发送UDP数据报的函数。它的函数原型为: ```c err_t udp_send(struct udp_pcb *pcb, struct pbuf *p); ``` 其中,pcb参数是指向UDP协议控制块的指针,p参数是指向要发送的数据报的pbuf结构的指针。 调用udp_send函数时,lwIP会将pbuf结构中的数据报发送到指定的目的地址和端口。如果发送成功,则返回ERR_OK;否则,返回一个错误码。 需要注意的是,使用udp_send函数发送数据之前,必须先创建一个UDP协议控制块(UDP PCB)并将其绑定到指定的本地地址和端口上。否则,udp_send函数将无法发送数据。 下面是一个简单的示例,演示了如何使用udp_send函数发送UDP数据报: ```c // 创建UDP协议控制块 struct udp_pcb *pcb = udp_new(); // 将UDP协议控制块绑定到本地地址和端口上 ip_addr_t addr = IPADDR_ANY; u16_t port = 12345; udp_bind(pcb, &addr, port); // 创建一个pbuf结构,用于存放要发送的数据 char data[] = "Hello, world!"; struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, sizeof(data), PBUF_RAM); memcpy(p->payload, data, sizeof(data)); // 发送数据报 ip_addr_t dest_addr; u16_t dest_port; ipaddr_aton("192.168.1.100", &dest_addr); dest_port = 54321; udp_sendto(pcb, p, &dest_addr, dest_port); // 释放pbuf结构 pbuf_free(p); // 删除UDP协议控制块 udp_remove(pcb); ``` 在上述示例中,我们首先创建了一个UDP协议控制块,并将其绑定到本地地址和端口上。然后,我们创建了一个pbuf结构,将要发送的数据拷贝到该结构的payload字段中。最后,我们使用udp_sendto函数将该pbuf结构中的数据报发送到指定的目的地址和端口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值