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);中构造方法
抛出:
ds.receive(dp);中DatagramSocket的receive()方法
抛出:
InetAddress.getByName("localhost")中getByName()方法
抛出:
是为全局 IPv6 地址指定的。
ds.send(dp);中DatagramSocket.send(dp)
抛出:
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- 如果此套接字具有相关联的通道,且通道处于非阻塞模式。
相关文章推荐
- SpringMVC的拦截器
- Java运算符
- JAVA UDP协议编程
- SSH学习(三)Struts2之Action下
- 1 Eclipse 安装 Hibernate 插件
- Java的变量类型
- JRE和JDK的区别及作用
- 7 -- Spring的基本用法 -- 10... 获取其他Bean的属性值;获取Field值;获取任意方法的返回值
- Java 播放多媒体 谈Java Media Framework
- JAVA中几种文件操作流的效率对比
- Dubbo+spring+springmvc+mybatis+Maven+Jetty+Mysql+Ajax多框架融合学习网址收藏
- JNDI中 java:comp/env 的理解
- springmvc-interceptor(拦截器)
- OJ用java时总出现Time Limit Exceeded原因之一
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- java泛型
- tips:Java中while的判断条件
- springMVC注解简单例子
- 分页JavaBean
- SpringMVC+Mybatis 环境搭建手记(下)