Java之UDP傳輸聊天程式小Demo(多執行緒)
阿新 • • 發佈:2018-12-13
ChatDemo.java
import java.net.DatagramSocket; public class ChatDemo { public static void main(String[] args) { try { send s = new send(new DatagramSocket()); receive r = new receive(new DatagramSocket(10000)); new Thread(s).start(); new Thread(r).start(); } catch (Exception e){} } }
傳送端任務程式碼:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class send implements Runnable{ private DatagramSocket ds; public send(DatagramSocket ds){ this.ds = ds; } @Override public void run() { System.out.println("客戶端啟動......"); try { BufferedReader bufreader = new BufferedReader(new InputStreamReader(System.in)); String line; while((line=bufreader.readLine())!=null) { byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length, InetAddress.getByName("可以填廣播地址來群聊"),10000); if("q".equals(line)) { ds.send(dp); break; } ds.send(dp); } ds.close(); bufreader.close(); } catch (Exception e){} } }
接收端任務程式碼:
import java.net.DatagramPacket; import java.net.DatagramSocket; public class receive implements Runnable{ private DatagramSocket ds; public receive(DatagramSocket ds){ this.ds = ds; } @Override public void run() { try { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); while(dp!=null) { ds.receive(dp); String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String data = new String(dp.getData(),0,dp.getLength()); if("q".equals(data)) { System.out.println(ip+"退出聊天......"); break; } System.out.println("ip:"+ip); System.out.println("port:"+port); System.out.println("data:"+data); System.out.println(); } ds.close(); } catch (Exception e){} } }