UDP
消息发送
发送端
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; //不需要连接服务器 public class UdpClientDemo01 { public static void main(String[] args) throws Exception { //1. 建立一个Socket DatagramSocket socket = new DatagramSocket(); //2. 建个包 String msg = "你好啊,服务器!"; InetAddress localhost = InetAddress.getByName("localhost"); int port = 9090; // 数据,数据的长度起始,要发送给谁 DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port); //3. 发送包 socket.send(packet); //4. 关闭流 socket.close(); } }
接收端
import java.net.DatagramPacket; import java.net.DatagramSocket; //还是要等待客户端的链接! public class UdpServerDemo01 { public static void main(String[] args) throws Exception { //开放端口 DatagramSocket socket = new DatagramSocket(9090); // 接收数据包 byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length); socket.receive(packet); //阻塞接收 System.out.println(packet.getAddress().getHostAddress()); System.out.println(new String(packet.getData(), 0, packet.getLength())); //关闭连接 socket.close(); } }
实现聊天
发送端
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class UdpSenderDemo01 { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(8888); // 准备数据:控制台读取 System.in BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while (true) { String data = reader.readLine(); byte[] datas = data.getBytes(); DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 6666)); socket.send(packet); if (data.equals("bye")) { break; } } socket.close(); } }
接受端
import javax.xml.stream.FactoryConfigurationError; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UdpReceiveDemo01 { public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(6666); while (true) { // 准备接收包裹 byte[] container = new byte[1024]; DatagramPacket packet = new DatagramPacket(container, 0, container.length); socket.receive(packet); // 阻塞式接收包裹 // 断开连接 bye byte[] data = packet.getData(); String receiveData = new String(data, 0, packet.getLength()); System.out.println(receiveData); if (receiveData.equals("bye")) { break; } } socket.close(); } }
在线咨询
在线咨询:两个人都可以是发送方,也都可以是接收方
TalkSend
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; public class TalkSend implements Runnable{ private DatagramSocket socket = null; private BufferedReader reader = null; private int fromPort; private String toIP; private int toPort; public TalkSend(int formPort,String toIP,int toPort) { this.fromPort = formPort; this.toIP = toIP; this.toPort = toPort; try { socket = new DatagramSocket(fromPort); reader = new BufferedReader(new InputStreamReader(System.in)); } catch (Exception e) { e.printStackTrace(); } } @Override public void run() { while (true){ try { String data = reader.readLine(); byte [] datas = data.getBytes(); DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort)); socket.send(packet); if(data.equals("bye")){ break; } }catch (Exception e){ e.printStackTrace(); } } socket.close(); //reader.close(); } }
TalkReceive
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class TalkReceive implements Runnable{ DatagramSocket socket = null; private int port; private String msgFrom; public TalkReceive(int port,String msgFrom){ this.port = port; this.msgFrom = msgFrom; try { socket = new DatagramSocket(port); }catch (SocketException e){ e.printStackTrace(); } } @Override public void run() { while (true){ try { byte[] container = new byte[1024]; DatagramPacket packet = new DatagramPacket(container,0,container.length); socket.receive(packet);//阻塞式接受包裹 //断开连接bye byte[]data = packet.getData(); String receiveData = new String(data,0,packet.getLength()); System.out.println(msgFrom+""+receiveData); if (receiveData.equals("bye")){ break; } }catch (IOException e){ e.printStackTrace(); } }socket.close(); } }
TalkStudent
public class TalkStudent { public static void main(String[] args) { new Thread(new TalkSend(7777,"localhost",9999)).start(); new Thread(new TalkReceive(8888,"老师")).start(); } }
TalkTeacher
public class TalkTeacher { public static void main(String[] args) { new Thread(new TalkSend(5555, "localhost", 8888)).start(); new Thread(new TalkReceive(9999, "学生")).start(); } }
URL
统一资源定位符:定位资源,定位互联网上的某一个资源
URL下载
import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class UrlDown { public static void main(String[] args) throws Exception { // 1. 下载地址 URL url = new URL("https://kkimgs.yisou.com/ims?kt=url&at=ori&key=aHR0cDovL3BpYzEuYXJrb28uY29tLzNBM0U3MTY5OTgzNDQ4NDI4MzU2M0JDNDdFOEE4RTY5L3BpY3R1cmUvb18xZmxzZnUxa2kxcW0xYm9oMXZhMjEzc3IxYWZhOC5qcGc=&sign=yx:tcu8a4v4pgux8UURHzXuKCIyTMo=&tv=0_0"); // 2. 连接到这个资源 HTTP HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStream inputStream = urlConnection.getInputStream(); FileOutputStream fos = new FileOutputStream("d://SecurityFile.jpg"); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { fos.write(buffer, 0, len); // 写出这个数据 } fos.close(); inputStream.close(); urlConnection.disconnect(); // 断开连接 } }