A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cdk3344520 初级黑马   /  2019-9-21 09:40  /  955 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 cdk3344520 于 2019-9-21 09:42 编辑

2、UDP
UDP:user datagram Protocol 用户数据协议,无法保证数据的安全性,但是可以提交数据传输的效。
接收数据:为阻塞式,需要单独作为一个线程
1、创建网络通道datagramSocket,应当是包含端口地址的构造器
2、创建数据包datagramPacket ,其中构造方法必须包含一个空的字符缓冲区,偏移量等信息。
3、通过datagramSocket.receiver(datagramPacket);接受数据,向数据包写入数据。
4、获取数据包内容 new String(datagramPacket.getData() , datagramPacket.getOffset(),datagramPacket.getLength());
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(2345);
byte[] b = new byte[1024];
while (true) {
DatagramPacket datagramPacket = new DatagramPacket(b, b.length);
datagramSocket.receive(datagramPacket);//接受数据
String string = new String(datagramPacket.getData(), datagramPacket.getOffset(),
datagramPacket.getLength());
System.out.println("接受到的数据是" + string);
}
}




kkkb
知名人士10
发送数据:
1、创建网络通道datagramSocket,构造器不需写入
2、创建数据包 datagramPacket,构造方法里面包含需要写入的字节数组,偏移量,目标地址,目标端口号,当然也可以通过set方式设置目标地址地址等信息
3、发送数据报 datagramSocket.send(datagramPacket);
public static void main(String[] args) throws IOException {
//创建一个网络通道
DatagramSocket datagramSocket = new DatagramSocket();
//将数据打包成数据报包
String message="nnnnnn";
DatagramPacket datagramPacket = new DatagramPacket(
message.getBytes(), message.getBytes().length,
InetAddress.getByName("192.168.46.19"),
2345);
datagramSocket.send(datagramPacket);
datagramSocket.close();
}


3、UDP多播广播
发送数据:
1、创建多播广播通道 new MulticastSocket( );
2、获取组播地址并将广播加入此地址 multicastSocket.jionGroup( InterAddress.getByName("266.81.9.8") );
3、构建datagramPacket,包含byte[]的内容,byte[]长度,ip,端口号。当然可以不用在构建方法添加ip和端口号。
4、发送消息:multicastSocket.send(datagramPacket);
public static void main(String[] args) throws IOException {
MulticastSocket multicastSocket = new MulticastSocket();
InetAddress group = InetAddress.getByName("226.81.9.8");
multicastSocket.joinGroup(group);
String content = "刷屏100遍";
DatagramPacket dp = new DatagramPacket(content.getBytes(),content.getBytes().length);
dp.setAddress(group);
dp.setPort(2426);
multicastSocket.send(dp);
}




kkkb
知名人士10
接收数据:阻塞式,需要单独作为一个线程
1、创建多播广播通道:new MuliticastSocket(2426); 构造方法应当包含开启的端口号
2、获取广播地址,并加入此广播地址 muliticast.jionGroup(InterAddress.getByName("192.22.22.2"));
3、创建你个空的btye[]数组。和一个datdagramPacke对象。包含btye[]相关信息
4、接收数据:mutilicastSocket.receive(datagramPacket);
5、读取datagramPacket内容:利用String的构造方法
public static void main(String[] args) throws IOException {
MulticastSocket ms= new MulticastSocket(2426);
InetAddress group = InetAddress.getByName("226.81.9.8");
ms.joinGroup(group);
byte[] b = new byte[1024];
while (true) {
DatagramPacket datagramPacket = new DatagramPacket(b, b.length);
ms.receive(datagramPacket);//接受数据
String string = new String(datagramPacket.getData(), datagramPacket.getOffset(),
datagramPacket.getLength());
System.out.println(datagramPacket.getAddress()+"" + string);
}
4、NIO
NIO是jdk1.4之后引入的一套全新的IO API,处理数据的方式不同于传统IO,传统IO的处理数据的方式以字节为单位,而NIO是一个Buffer(数据块) 为单位,传统IO属于阻塞式(流在读取数据时如果未读到时,程序会处于阻塞状态);而NIO的处理的方式为非阻塞式方式允许(底层为信号通讯),NIO可以在单线程应用中处理多个客户请求。



3、UDP多播广播
发送数据:
1、创建多播广播通道 new MulticastSocket( );
2、获取组播地址并将广播加入此地址 multicastSocket.jionGroup( InterAddress.getByName("266.81.9.8") );
3、构建datagramPacket,包含byte[]的内容,byte[]长度,ip,端口号。当然可以不用在构建方法添加ip和端口号。
4、发送消息:multicastSocket.send(datagramPacket);
public static void main(String[] args) throws IOException {
MulticastSocket multicastSocket = new MulticastSocket();
InetAddress group = InetAddress.getByName("226.81.9.8");
multicastSocket.joinGroup(group);
String content = "刷屏100遍";
DatagramPacket dp = new DatagramPacket(content.getBytes(),content.getBytes().length);
dp.setAddress(group);
dp.setPort(2426);
multicastSocket.send(dp);
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马