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

//接收端

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 - 如果此套接字具有相关联的通道,且通道处于非阻塞模式。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值