明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

3步學(xué)會Java Socket編程(二)

[摘要]第二步 多個(gè)客戶同時(shí)連接  在實(shí)際的網(wǎng)絡(luò)環(huán)境里,同一時(shí)間只對一個(gè)用戶服務(wù)是不可行的。一個(gè)優(yōu)秀的網(wǎng)絡(luò)服務(wù)程序除了能處理用戶的輸入信息,還必須能夠同時(shí)響應(yīng)多個(gè)客戶端的連接請求。在java中,實(shí)現(xiàn)以上功能特點(diǎn)是非常容易的! ≡O(shè)計(jì)原理:  主程序監(jiān)聽一端口,等待客戶接入;同時(shí)構(gòu)造一個(gè)線程類,準(zhǔn)備接管會話...
第二步 多個(gè)客戶同時(shí)連接

  在實(shí)際的網(wǎng)絡(luò)環(huán)境里,同一時(shí)間只對一個(gè)用戶服務(wù)是不可行的。一個(gè)優(yōu)秀的網(wǎng)絡(luò)服務(wù)程序除了能處理用戶的輸入信息,還必須能夠同時(shí)響應(yīng)多個(gè)客戶端的連接請求。在java中,實(shí)現(xiàn)以上功能特點(diǎn)是非常容易的。

  設(shè)計(jì)原理:

  主程序監(jiān)聽一端口,等待客戶接入;同時(shí)構(gòu)造一個(gè)線程類,準(zhǔn)備接管會話。當(dāng)一個(gè)Socket會話產(chǎn)生后,將這個(gè)會話交給線程處理,然后主程序繼續(xù)監(jiān)聽。運(yùn)用Thread類或Runnable接口來實(shí)現(xiàn)是不錯(cuò)的辦法。

 。麑(shí)現(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();
}
}

  這個(gè)程序監(jiān)聽10000端口,并將接入交給CreateServerThread線程運(yùn)行。CreateServerThread線程接受輸入,并將輸入回應(yīng)客戶,直到客戶輸入"bye",線程結(jié)束。我們可以在createMessage方法中,對輸入進(jìn)行處理,并產(chǎn)生結(jié)果,然后把結(jié)果返回給客戶。