您的位置:首页 > 编程语言 > Java开发

java UDP编程中一些小细节问题

2017-01-14 19:03 621 查看
//接收端

import java.net.DatagramSocket;

import java.net.DatagramPacket;

public class UDPServerA

{
public static void main(String[] args) throws Exception{
//这里抛出异常
DatagramSocket ds=new DatagramSocket(8888);//创建本地端口套接字,8888为本地端口。这步会有异常产生
byte[] buff=new byte[1024];//接收信息数组
DatagramPacket dp=new DatagramPacket(buff,1024);//数据报包接收数据到数组
ds.receive(dp);//套接字开始接收数据包。这步会有异常产生
//String str=new String(buff,0,buff.length);//这里也可以打印出接收数据,但会多出很多空行,因为打印了数组1024B的字节
//System.out.print(str);//而一般我们测试的接收数据达不到填充整个数组buff,所以会多出空行

String str1=new String(dp.getData(),0,dp.getLength());//dp.getData()得到数组,dp类的getLength()方法得到长度,

//数组.length属性得到长度、String.length()方法得到长度。

System.out.println(str1);
ds.close();
}

}

//发送端

import java.net.DatagramSocket;

import java.net.DatagramPacket;

import java.net.InetAddress;

public class UDPClientA

{
public static void main(String[] args) throws Exception{
//创建本地套接字
DatagramSocket ds=new DatagramSocket(9999);//9999为本地端口,这步会产生异常
//发送的数据
String str="abc";
//创建用于发送数据的数据报包
DatagramPacket dp=new DatagramPacket(str.getBytes(),0,str.length(),InetAddress.getByName("localhost"),8888);//8888为

//发送的目的端口。这步会产生异常
ds.send(dp);//这步会产生异常
ds.close();
}

}

上述注释简单说了端口号、打印接收数据等问题

这里简单说下异常:

用throws Exception抛出,因为是基类,而且Exception在java.lang包下,所以不用import具体的类;

DatagramSocket ds=new DatagramSocket(8888);中构造方法

抛出:
SocketException
 - 如果套接字不能被打开,或不能将其绑定到指定的本地端口。
SecurityException
 - 如果安全管理器存在并且其 
checkListen
 方法不允许进行该操作。

ds.receive(dp);中DatagramSocket的receive()方法

抛出:
IOException
 - 如果发生 I/O 错误。
SocketTimeoutException
 - 如果先前调用了 setSoTimeout 且超时值已过。
PortUnreachableException
 - 套接字连接到当前不可达的目标时可能抛出。注意,不能保证一定抛出该异常。
IllegalBlockingModeException
 - 如果此套接字具有相关联的通道,且通道处于非阻塞模式。

InetAddress.getByName("localhost")中getByName()方法

抛出:
UnknownHostException
 - 如果找不到 
host
 的 IP 地址,或者 scope_id
是为全局 IPv6 地址指定的。
SecurityException
 - 如果安全管理器存在并且其 checkConnect 方法不允许进行该操作

ds.send(dp);中DatagramSocket.send(dp)

抛出:
IOException
 - 如果发生 I/O 错误。
SecurityException
 - 如果安全管理器存在并且其 
checkMulticast
 或 
checkConnect
 方法不允许进行发送。
PortUnreachableException
 - 套接字连接到当前不可达的目标时可能抛出。注意,不能保证一定抛出该异常。
IllegalBlockingModeException
 - 如果此套接字具有相关联的通道,且通道处于非阻塞模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: