UDP
UDP
发短信:不用连接,需要知道对方的地址!
发送端
package com.hua; 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("127.0.0.1"); int port = 9090; //数据, 数据的长度起始,要发送给谁 DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,9090); //3、发送包 socket.send(packet); //4、关闭流 socket.close(); } }
接收端
package com.hua; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; //还是要等待客户端的连接! 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(); } }
package com.hua; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.*; import java.util.stream.Stream; 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(); } }
package com.hua; 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 (data.equals("bye")){ break; } } socket.close(); } }
在线咨询:两个人都可以是发送方,也都可以是接收方!
package com.hua; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class TalkSend implements Runnable{ DatagramSocket socket = null; BufferedReader reader =null; private int fromPort; private String toIP; private int toPort; public TalkSend(int fromPort, String toIP, int toPort) { this.fromPort = fromPort; this.toIP = toIP; this.toPort = toPort; try { socket = new DatagramSocket(fromPort); reader = new BufferedReader(new InputStreamReader(System.in)); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while(true){ String data = null; try { 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 (IOException e) { e.printStackTrace(); } } socket.close(); } }
package com.hua; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class TalkReceive implements Runnable{ DatagramSocket socket = null; DatagramPacket packet = 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){ //准备接收包裹 byte[] container = new byte[1024]; packet = new DatagramPacket(container,0,container.length); try { socket.receive(packet);//阻塞式接收包裹 } catch (IOException e) { e.printStackTrace(); } //断开连接 bye byte[] data = packet.getData(); String receivedata = new String(data, 0, packet.getLength()); System.out.println(msgFrom+":"+receivedata); if (receivedata.equals("bye")){ break; } } socket.close(); } }
package com.hua; public class TalkTeacher { public static void main(String[] args) { new Thread(new TalkSend(6666,"localhost",8888)).start(); new Thread(new TalkReceive(9999,"学生")).start(); } }
package com.hua; public class TalkStudent { public static void main(String[] args) { //开启两个线程 new Thread(new TalkSend(7777,"localhost",9999)).start(); new Thread(new TalkReceive(8888,"老师")).start(); } }
我的一生
第1章-废物的一生
第50章-糟糕的婴儿
第300章-莫欺少年穷
第600章-莫欺中年穷
第1000章-莫欺老年穷
第1100章-不详的离去
第1101章-棺材板的震动
第1150章-盗墓贼的眼泪
第1200章-死者为大