經典 TCP Socket 教學範例:Server 監聽 port 5000,發送歡迎訊息;Application Client 與 Applet Client 分別連線接收訊息。展示 ServerSocket、Socket、DataInputStream/DataOutputStream 基礎用法。
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(5000)) {
System.out.println("Server 啟動,等待連線...");
try (Socket client = server.accept();
DataOutputStream out = new DataOutputStream(client.getOutputStream())) {
System.out.println("Client 連線: " + client.getInetAddress());
out.writeUTF("Welcome to Server. Bye!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
String host = (args.length > 0) ? args[0] : "localhost";
try (Socket socket = new Socket(host, 5000);
DataInputStream in = new DataInputStream(socket.getInputStream())) {
String msg = in.readUTF();
System.out.println("Server 回應: " + msg);
} catch (IOException e) {
System.err.println("連線失敗: " + e.getMessage());
}
}
}
import java.applet.Applet;
import java.awt.Graphics;
import java.io.*;
import java.net.*;
public class AppletClient extends Applet {
private String info = "連線中...";
public void init() {
try (Socket socket = new Socket(getCodeBase().getHost(), 5000);
DataInputStream in = new DataInputStream(socket.getInputStream())) {
info = in.readUTF();
} catch (Exception e) {
info = "錯誤: " + e.getMessage();
}
repaint();
}
public void paint(Graphics g) { g.drawString(info, 20, 20); }
}
HTML 引用:<applet code="AppletClient.class" width=200 height=200></applet>
javac Server.java Client.java AppletClient.javajava Serverjava Client localhostObjectOutputStream/ObjectInputStream。accept() 後交給 ExecutorService 處理每個 Client。