UDP多線程實現發送和接收消息在同一個界面。


package UDP;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class Demo03 {
public static void main(String[] args) {
new Receive().start();
new Send().start();
}
}

class Receive extends Thread {
public void run() {
try {
// 創建socket相當於創建碼頭,指定端口號
DatagramSocket socket1 = new DatagramSocket(6666);
// 創建Packet相當於集裝箱
DatagramPacket packet1 = new DatagramPacket(new byte[1024], 1024);
while (true) {

// 接收數據:接貨
socket1.receive(packet1);
// 獲取數據(獲取到所有的字節個數)
byte[] arr = packet1.getData();
int len = packet1.getLength();// 獲取有效的字節個數
String ip = packet1.getAddress().getHostAddress();// 獲取ip地址
int port = packet1.getPort();// 獲取端口號
System.out.println(ip + ":" + port + ":" + new String(arr, 0, len));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

class Send extends Thread {
public void run() {
Scanner sc = new Scanner(System.in);
// 創建碼頭
DatagramSocket socket;
try {
socket = new DatagramSocket();
while (true) {
// 獲取到鍵盤錄入的數據
String line = sc.nextLine();
// 判斷啥時候退出
if ("quit".equals(line)) {
break;
}
// 創建集裝箱
DatagramPacket packet = new DatagramPacket(line.getBytes(), line.getBytes().length,
InetAddress.getByName("127.0.0.1"), 6666);
// 將數據發出去:發貨
// 發貨,將數據發送出去
socket.send(packet);
// 關閉碼頭
// socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}

}
}

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM