第二步 多個客戶同時連接
在實際的網絡環境里,同一時間只對一個用戶服務是不可行的。一個優秀的網絡服務程序除了能處理用戶的輸入信息,還必須能夠同時響應多個客戶端的連接請求。在java中,實現以上功能特點是非常容易的。
設計原理:
主程序監聽一端口,等待客戶接入;同時構造一個線程類,準備接管會話。當一個Socket會話產生后,將這個會話交給線程處理,然后主程序繼續監聽。運用Thread類或Runnable接口來實現是不錯的辦法。
{實現消息共享}
import java.io.*; import java.net.*;
public class Server extends ServerSocket { private static final int SERVER_PORT = 10000;
public Server() throws IOException { super(SERVER_PORT);
try { while (true) { Socket socket = accept(); new CreateServerThread(socket); } } catch (IOException e) {} finally { close(); } } //--- CreateServerThread class CreateServerThread extends Thread { private Socket client; private BufferedReader in; private PrintWriter out;
public CreateServerThread(Socket s) throws IOException { client = s;
in = new BufferedReader(new InputStreamReader(client.getInputStream(), "GB2312")); out = new PrintWriter(client.getOutputStream(), true); out.println("--- Welcome ---"); start(); }
public void run() { try { String line = in.readLine();
while (!line.equals("bye")) { String msg = createMessage(line); out.println(msg); line = in.readLine(); } out.println("--- See you, bye! ---"); client.close(); } catch (IOException e) {} }
private String createMessage(String line) { xxxxxxxxx; } }
public static void main(String[] args) throws IOException { new Server(); } }
這個程序監聽10000端口,并將接入交給CreateServerThread線程運行。CreateServerThread線程接受輸入,并將輸入回應客戶,直到客戶輸入"bye",線程結束。我們可以在createMessage方法中,對輸入進行處理,并產生結果,然后把結果返回給客戶。
|