第二步 多個客戶同時連接
在實際的網(wǎng)絡環(huán)境里,同一時間只對一個用戶服務是不可行的。一個優(yōu)秀的網(wǎng)絡服務程序除了能處理用戶的輸入信息,還必須能夠同時響應多個客戶端的連接請求。在java中,實現(xiàn)以上功能特點是非常容易的。
設計原理:
主程序監(jiān)聽一端口,等待客戶接入;同時構造一個線程類,準備接管會話。當一個Socket會話產(chǎn)生后,將這個會話交給線程處理,然后主程序繼續(xù)監(jiān)聽。運用Thread類或Runnable接口來實現(xiàn)是不錯的辦法。
{實現(xiàn)消息共享}
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();
}
}
這個程序監(jiān)聽10000端口,并將接入交給CreateServerThread線程運行。CreateServerThread線程接受輸入,并將輸入回應客戶,直到客戶輸入"bye",線程結束。我們可以在createMessage方法中,對輸入進行處理,并產(chǎn)生結果,然后把結果返回給客戶。
相關推薦:計算機等級考試二級Java經(jīng)典算法大全匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |