第二步 多个客户同时连接
在实际的网络环境里,同一时间只对一个用户服务是不可行的。一个优秀的网络服务程序除了能处理用户的输入信息,还必须能够同时响应多个客户端的连接请求。在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方法中,对输入进行处理,并产生结果,然后把结果返回给客户。