Java使用UDP協議編寫聊天程式
阿新 • • 發佈:2019-02-04
編寫一個聊天程式。
有收資料的部分,和發資料的部分。
這兩部分需要同時執行。
那就需要用到多執行緒技術。
一個執行緒控制收,一個執行緒控制發。
因為收和發動作是不一致的,所以要定義兩個run方法。
有收資料的部分,和發資料的部分。
這兩部分需要同時執行。
那就需要用到多執行緒技術。
一個執行緒控制收,一個執行緒控制發。
因為收和發動作是不一致的,所以要定義兩個run方法。
而且這兩個方法要封裝到不同的類中。
import java.io.*; import java.net.*; class Send implements Runnable { private DatagramSocket ds; public Send(DatagramSocket ds) { this.ds = ds; } public void run() { try { BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line=bufr.readLine())!=null) { byte[] buf = line.getBytes(); DatagramPacket dp =new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10002); ds.send(dp); if("886".equals(line)) break; } } catch (Exception e) { throw new RuntimeException("傳送端失敗"); } } } class Rece implements Runnable { private DatagramSocket ds; public Rece(DatagramSocket ds) { this.ds = ds; } public void run() { try { while(true) { byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.receive(dp); String ip = dp.getAddress().getHostAddress(); String data = new String(dp.getData(),0,dp.getLength()); if("886".equals(data)) { System.out.println(ip+"....離開聊天室"); break; } System.out.println(ip+":"+data); } } catch (Exception e) { throw new RuntimeException("接收端失敗"); } } } class ChatDemo { public static void main(String[] args) throws Exception { DatagramSocket sendSocket = new DatagramSocket(); DatagramSocket receSocket = new DatagramSocket(10002); new Thread(new Send(sendSocket)).start(); new Thread(new Rece(receSocket)).start(); } }
——摘自《畢向東25天》