javaUDP逐步实现多线程发送和接收消息
生活随笔
收集整理的這篇文章主要介紹了
javaUDP逐步实现多线程发送和接收消息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、UDP實現發送消息
- 二、UDP實現聊天
- 三、UDP多線程在線聊天
一、UDP實現發送消息
發送端
//不需要連接服務器 public class UdpClientDemo1 {public static void main(String[] args) throws Exception{//1.建立一個SocketDatagramSocket socket = new DatagramSocket();//2.建個包String msg = "你好啊,服務器!";InetAddress localhost = InetAddress.getByName("localhost");int port = 9000;//數據,數據的長度起始,要發送給誰DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);//3.發送包socket.send(packet);//4.關閉流socket.close();} }接收端
public class UdpServerDemo1 {public static void main(String[] args) throws Exception {//開發端口DatagramSocket socket = new DatagramSocket(9000);//接收數據包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();} }二、UDP實現聊天
循環發送消息
public class UdpSenderDemo1 {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(8888);//準備數據:控制臺讀取System.inBufferedReader 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();} }循環接收消息
public class UdpReceiveDemo1 {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); //阻塞式接收包裹//斷開連接byte[] data = packet.getData();String receiveData = new String(data, 0, data.length);System.out.println(receiveData);if(receiveData.equals("bye")){break;}}socket.close();} }三、UDP多線程在線聊天
在線聊天:兩人都可以是發送方,也都可以是接收方
發送端
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 (Exception e) {e.printStackTrace();}}@Overridepublic void run() {//準備數據:控制臺讀取System.inwhile(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 (IOException e) {e.printStackTrace();}}socket.close();} }接收端
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();}}@Overridepublic void run() {while(true) {try {//準備接收包裹byte[] container = new byte[1024];DatagramPacket packet = new DatagramPacket(container, 0, container.length);socket.receive(packet); //阻塞式接收包裹//斷開連接byte[] data = packet.getData();String receiveData = new String(data, 0, data.length);System.out.println(msgFrom+":"+receiveData);if(receiveData.equals("bye")){break;}} catch (IOException e) {e.printStackTrace();}}socket.close();} }學生端測試
public class TalkStudent {public static void main(String[] args) {//開啟兩個線程:發送和接收new Thread(new TalkSend(7777,"localhost",9999)).start();new Thread(new TalkReceive(8888,"老師")).start();} }老師端測試
public class TalkTeacher {public static void main(String[] args) {new Thread(new TalkSend(5555,"localhost",8888)).start();new Thread(new TalkReceive(9999,"學生")).start();} }測試結果
總結
以上是生活随笔為你收集整理的javaUDP逐步实现多线程发送和接收消息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [vue] vue如何优化首页的加载速度
- 下一篇: pc机收集信息cpu\配置\网络信息