linux c udp 通信 记录

linux c udp 通信 记录

注意

udp 中的 bind的具体含义 ,什么时候用,什么时候不用
udp 中的connect的具体含义

UDP中的connect方法和TCP的connect方法详解

上一篇文章中,我发现了UDP也是有这connect方法的,这使我非常不理解,下面为大家讲解一下这个connect方法。
我们知道UDP是无连接的,它可以给多个IP发送数据包,包括广播地址或者多播通信的实现,而这些是TCP/IP无法实现的。
但是UDP提供了这样的一个connect()方法,它有两种使用方式,当使用了这个方法之后,那么就限定了这个socket的使用范围: 只允许从这个指定的SocketAddress 上获得数据包和向这个指定的SocketAddress 发送数据包, 当你一旦通过这个socket向别的地址发送了数据包,或者接收到了不是这个地址发送来的数据包,那么程序就会抛出IllegalArgumentException 异常, 特殊的是如果指定的这个SocketAddress 是个多播地址或者广播地址,那么只允许向这个地址发送数据包,不允许从这个地址接收数据包。

// SocketAddress 其实就是IP地址+端口号 , 而InetAddress 只有IP地址
connect(InetAddress address, int port) 
connect(SocketAddress addr) 

UDP通过这样的方式,限定了单向的通信,但是注意的是,这里的限定只是仅限于一方,而并没有限制另外一方,另外一方依旧是可以向多个IP地址发送数据包的,因此这和TCP/IP 是极大的不同。TCP/IP的connect()是要有一个三次握手的过程的,而UDP的connect显然没有,它只是将IP地址和端口号进行了存储,对要进行通信的对象做了一个限制。 而且 TCP/IP的connect()只可以进行一次,但是UDP的connect()可以调用多次, 每次重新调用connect(SocketAddress ),就是将原来限制通信的对象修改为新的这个地址的对象, 或者调用disConnect() 方法,就会解除对通信对象的限制,这样这个socket就又可以多向的通信了。

当我们进行UDP通信的对象只有一个时,建议使用connect()方法,使用了这个方法之后有一个极大的好处:
当我们使用了connect(SocketAddress addr) 方法时,那么在socket对象里面就会将发送方的地址设置为此地址,那么发送的数据包对象就不用显式的标明 IP地址和 Port ,这样在调用send(packet)方法时,就不会对数据包再进行 IP地址和Port的安全检查,要发送的数据包少时优势体现不出来,但是当数据包多时,可以节省大量的时间。
send方法的源码:

UDP中的bind方法和TCP的bind方法详解
多播测试方法

在这里插入图片描述

Ncat ---- nc 命令

nc测试UDP是否正常

udp 监听 nc

udp服务器 监听 listen 本地8888端口,会把udp客户端发送过来的消息,及时打印
nc -ulp 8888

udp 客户端 nc

udp 客户端 通过端口8888 向 udp服务器发送消息
nc -u 192.168.99.215 8888

Ncat 互相聊天

在这里插入图片描述

在这里插入图片描述
Global Broadcast
Local Broadcast

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值