JAVA UDP基础

UDP是在IP上发送数据的另一种协议。不可靠,无法知道数据是否到达,也无法知道数据的不同

部分是否已发送时的数据到达。

UDP为什么有使用之地:在实时音频或视频中丢失或交换数据包只会出现噪声。噪声是可以容忍

的。但是不可容忍停顿,
UDP的实现分为两个类:DatagramPacket(将数据字节填充到数据报的UDP包中)和

DatagramSocket(可以收发UDP数据报)。

[b]与TCP的ServerSocket和Socket不同之处:[/b]1.UDP没有两台主机间唯一连接的概念,一个DatagramSocket可以从多个独立主机收发数据。此

处的socket并不专注于一个连接。
2.TCP将网络视为流,通过socket获取输入输出流来收发数据,UDP以数据包形式发送

[b]DatagramPacket[/b]UDP数据报基于IP建立的,每台主机有65536个端口号可以使用。数据报中字节数限制为65536-8

个字节(首部要用8个字节)

构造函数:
public DatagramPacket(byte[] buffer,int length)
public DatagramPacket(byte[] buffer,int offset,int length)
如果试图构造一个长度超过buffer的DatagramPacket,将抛出IllegalArgumentException

可以在数据报发送之后并且发送之前修改数据报的data.
getInetAddress():返回一个包含远程主机地址的InetAddress对象。如果数据报是internet接

收的,返回的地址是发送机器的地址。如果是客户端,则返回的是寻址地址。
getPort():返回远程端口
SocketAddress getSocketAddress():返回一个包含远程主机和端口的SocketAddress对象。
byte[] getData():返回一个字节数组,其中包含数据报中的数据
[color=red]getLength():返回数据报中数据的字节数。它与getData()返回的数组长度不一定相等,
getLength()返回的值可能小于getData()返回的数组长度。[/color]


setData(byte[] data):
setData(byte[] data,int offset,int length)

setLength(int length):会改变内部缓冲区中包含实际数据报数据的字节数,而不包含未填充数据的空间。

[b]DatagramSocket:[/b]
构造函数:DatagramSocket()
构造函数:DatagramSocket(int port):如果无法创建socket,则抛出SocketException(原因为:指定的端口已被占用或者低于1024的端口没有特权 )

[b]TCP端口和UDP端口没有关联,TCP和UDP可以使用相同的端口号[/b]

for(int port=1024;port<=65535;port++)
{
try
{
DatagramSocket server=new DatagramSocket(port);
server.close();
}
catch (SocketException e)
{
System.out.println("There is a server on port:"+port);
}
}


DatagramSocket(int port,InetAddress interface)
DatagramSocket(SocketAddress interface)
void receive(DatagramPacket dp)throws IOException
:与ServerSocket的accept方法类似,此方法会阻塞调用线程,直到数据报到达。如果程序除了等待数据报外还有其他操作,就应当在单独的线程中调用receive()。

[b]void connect(InetAddress host,int port):[/b]
connect方法实际上不建立TCP意义上的连接。它确实知名DatagramSocket只对远程主机和指定远程端口发包。试图向另外的主机或端口发包将抛出IllegalArgumentException异常

disconnect():中止已连接DatagramSocket的"连接",这样可以再次收发任何主机和端口的包。


setSoTimeout(int timeout):默认0永不超时
void setReceiveBufferSize(int size)throws SocketException:
建议对来自此socket的输入进行缓冲时使用的字符字节数,但是底层完全可以忽略此建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值