- UDP传输数据
- UDP传输
- DatagramSocket与DatagramPacket
- 建立发送端,接收端。
- 建立数据包。
- 调用Socket的发送接收方法。
- 关闭Socket。
- 发送端与接收端是两个独立的运行程序。
- UDP传输-发送端思路
- 建立udp的socket服务
- 将要发送的数据封装成数据包
- 通过udp的socket服务,将数据包发送出
- 关闭资源
- udp协议发送数据思路
- 先创建datagramSocket对象 —>通过空参构造方法来构造
- 准备数据包 通过查看api得知使用四个参数的构造方法来准备数据包
- 获取ds实例后调用 send方法发送数据
- 关闭ds对象
- UDP传输
public class SendClient { public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(); String str = “你好张三”; byte[] bytes = str.getBytes(); int length = bytes.length; DatagramPacket dp = new DatagramPacket(bytes, length, InetAddress.getByName(“192.168.1.106”), 8888); ds.send(dp); ds.close(); } }
-
- udp协议接收数据代码
- 建立客户端的Socket服务,并明确要连接的服务器。
- 如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket流,Socket流中既有读取流,也有写入流.
- 通过Socket对象的方法,可以获取这两个流
- 通过流的对象可以对数据进行传输
- 如果传输数据完毕,关闭资源
- udp协议接收数据代码
public class ReceiveClient { public static void main(String[] args) throws Exception { DatagramSocket ds =new DatagramSocket(8888); byte[] a = new byte[1024]; DatagramPacket dp = new DatagramPacket(a, a.length); ds.receive(dp); byte[]b = dp.getData(); String str = new String(b); System.out.println(str); ds.close(); } }
- udp协议发送数据,数据来自键盘录入
public class SendClient { public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(); //String str = “你好张三”; Scanner scanner = new Scanner(System.in); while(scanner.hasNext()){ String data = scanner.nextLine(); if(“886”.equals(data)){ break; } byte[] bytes = data.getBytes(); int length = bytes.length; DatagramPacket dp = new DatagramPacket(bytes, length, InetAddress.getByName(“192.168.1.106”), 8888); ds.send(dp); } ds.close(); scanner.close(); } }
- 使用线程来模拟聊天
- 代码实现
- [1]创建2个线程 分别用来发送数据和接收数据
public class Chatroom { public static void main(String[] args) throws Exception { DatagramSocket dss = new DatagramSocket(); DatagramSocket dsr =new DatagramSocket(8888); ReceiveThread rt = new ReceiveThread(dsr); SendThread st = new SendThread(dss); Thread t1 = new Thread(rt); Thread t2 = new Thread(st); t1.start(); t2.start(); } }
-
- [2]接收线程代码
public class ReceiveThread implements Runnable { private DatagramSocket dss; public ReceiveThread(DatagramSocket dss) { this.dss = dss; } public void run() { try { while (true) { byte[] a = new byte[1024]; DatagramPacket dp = new DatagramPacket(a, a.length); dss.receive(dp); byte[] b = dp.getData(); String str = new String(b); System.out.println(“接收: “+str); } } catch (Exception e) { // TODO: handle exception } } }
-
- [3]创建发送线程代码
public class SendThread implements Runnable { private DatagramSocket dss; public SendThread(DatagramSocket dss) { this.dss = dss; } public void run() { Scanner scanner = new Scanner(System.in); try { while (scanner.hasNext()) { String data = scanner.nextLine(); if (“886”.equals(data)) { break; } byte[] bytes = data.getBytes(); int length = bytes.length; DatagramPacket dp = new DatagramPacket(bytes, length, InetAddress.getByName(“192.168.1.106”), 8888); dss.send(dp); } } catch (Exception e) { } dss.close(); scanner.close(); } }