首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 網路程式設計筆記:UDP/TCP 通訊、Socket 模型與多線程聊天室實作

     編輯:Java 相關知識

網路通訊三要素

  1. IP 位址:裝置唯一標識。InetAddress 類封裝操作,getLocalHost() 取得本機。
  2. 埠號:0~65535,0~1023 系統保留。Web 80、Tomcat 8080、MySQL 3306。
  3. 協議:TCP(可靠、面向連線、三次握手) vs UDP(不可靠、無連線、速度快、64KB 封包限制)。

UDP 程式設計:DatagramSocket + DatagramPacket

發送端

DatagramSocket ds = new DatagramSocket(12345);
byte[] buf = "UDP message".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
    InetAddress.getByName("localhost"), 10000);
ds.send(dp);
ds.close();

接收端

DatagramSocket ds = new DatagramSocket(10000);
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());
System.out.println(ip + " : " + data);

UDP 多線程聊天室雛形

發送執行緒讀取鍵盤輸入 send(),接收執行緒循環 receive() 印出訊息,雙向同時運行。

TCP 程式設計:ServerSocket + Socket

伺服器端

ServerSocket ss = new ServerSocket(10002);
Socket s = ss.accept(); // 阻塞等待連線
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf, 0, len));
s.close(); ss.close();

客戶端

Socket s = new Socket("localhost", 10002);
OutputStream out = s.getOutputStream();
out.write("TCP message".getBytes());
s.close();

關鍵類別速查

類別用途核心方法
InetAddressIP 解析getByName(), getLocalHost(), getHostAddress()
DatagramSocketUDP 端點send(), receive(), close()
DatagramPacketUDP 資料封包getData(), getLength(), getAddress()
ServerSocketTCP 伺服器監聽accept(), close()
SocketTCP 連線端點getInputStream(), getOutputStream(), close()

協議選型建議

  • 檔案傳輸、郵件、HTTP → TCP(可靠性優先)
  • 即時語音/視訊、廣播、DNS 查詢 → UDP(低延遲優先)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved