网络编程(UDP传输)
*1.发送Send
* 创建DatagramSocket, 随机端口号
* 创建DatagramPacket, 指定数据, 长度, 地址, 端口
* 使用DatagramSocket发送DatagramPacket
* 关闭DatagramSocket
* 2.接收Receive
* 创建DatagramSocket, 指定端口号
* 创建DatagramPacket, 指定数组, 长度
* 使用DatagramSocket接收DatagramPacket
* 关闭DatagramSocket
* 从DatagramPacket中获取数据
* 3.接收方获取ip和端口号
* String ip = packet.getAddress().getHostAddress();
* int port = packet.getPort();
* 4.案例:
package com.th.socket; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; /** * Created by Administrator on 2018/6/6. * 网络编程之UDP socket编程 * 1- 创建DatagramSocket,指定端口号 (创建码头) * 2- 创建DatagramPacket, 指定数据 (创建包装箱) * 3- 使用DatagramSocket 发送DatagramPacket * 4- 关闭DatagramSocket */ public class UDP_send_01 { public static void main(String[] args) throws Exception { new Thread(new Runnable() { @Override public void run() { try { messageSend(); } catch (IOException e) { e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void run() { try { messageReceive(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } /** * * 网络编程之UDP socket编程 * 1- 创建DatagramSocket,指定端口号 (创建码头) * 2- 创建DatagramPacket, 指定数据 (创建包装箱) * 3- 使用DatagramSocket 接收DatagramPacket * 4- 关闭DatagramSocket * 5- 从DatagramPacket中获取数据 * @throws IOException */ private static void messageReceive() throws IOException { //1- 创建DatagramSocket,指定端口号 (创建码头) DatagramSocket socket = new DatagramSocket(6666); //2- 创建DatagramPacket, 指定数据 (创建包装箱) DatagramPacket datagramPacket = new DatagramPacket(new byte[1024], 1024); while ( true ){ //3- 使用DatagramSocket 接收DatagramPacket socket.receive(datagramPacket); // 使用内存输入流将字节转成字符串 处理有中文时的乱码 ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(datagramPacket.getData(), datagramPacket.getOffset(), datagramPacket.getLength()); InputStreamReader inputStreamReader = new InputStreamReader(byteArrayInputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = bufferedReader.readLine(); bufferedReader.close(); // 5- 从DatagramPacket中获取数据 // 5-1 获取数据 //byte[] data = datagramPacket.getData(); //int len = datagramPacket.getLength(); if ( "exit".equalsIgnoreCase(str) ) { break; } System.out.println(datagramPacket.getAddress().getHostAddress()); System.out.println(datagramPacket.getPort()); System.out.println(datagramPacket.getSocketAddress()); System.out.println(datagramPacket.getAddress().getHostName()); System.out.println(str); } //4- 关闭DatagramSocket socket.close(); } /** * * 网络编程之UDP socket编程 * 1- 创建DatagramSocket,指定端口号 (创建码头) * 2- 创建DatagramPacket, 指定数据 (创建包装箱) * 3- 使用DatagramSocket 发送DatagramPacket * 4- 关闭DatagramSocket * @throws IOException */ private static void messageSend() throws IOException { Scanner scanner = new Scanner(System.in); // 1- 创建DatagramSocket,指定端口号 (创建码头) DatagramSocket socket = new DatagramSocket(); // 2- 创建DatagramPacket, 指定数据 (创建包装箱) //String src = "Hello!你好啊!"; while ( true ){ String src = scanner.nextLine(); DatagramPacket datagramPacket = new DatagramPacket(src.getBytes(), src.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666); // 3- 使用DatagramSocket 发送DatagramPacket if ( "exit".equalsIgnoreCase(src) ) { socket.send(datagramPacket); break; } socket.send(datagramPacket); } // 4- 关闭DatagramSocket socket.close(); } }