您的位置:首页 > 编程语言 > Java开发

Java核心技术II:为多个客户端服务

2017-04-21 19:49 363 查看
上文的代码简单实现了一个服务器程序,但只能为一个服务端提供服务,也就是说同时只能建立一个连接。用线程的方法可实现为多个客户端服务。

import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/**
*
*/

/**
* @author Administrator
*新浪微博:ouc大飞
*/
public class ThreadedEchoServer {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
int i=0;
ServerSocket serverSocket=new  ServerSocket(8189);
while (true) {
Socket incoming=serverSocket.accept();
System.out.println("Spawning"+i);
Runnable runnable=new  ThreadedEchoHandler(incoming);
Thread t=new  Thread(runnable);
t.start();
i++;
}
} catch (Exception e) {
// TODO: handle exception
}

}

}
class ThreadedEchoHandler implements  Runnable{
public ThreadedEchoHandler(Socket i){
incoming=i;
}
public void run() {
try {
try {
InputStream inputStream=incoming.getInputStream();
OutputStream outputStream=incoming.getOutputStream();

Scanner in=new Scanner(inputStream);

PrintWriter out=new  PrintWriter(outputStream,true);
out.println("hello!enter BYE to exit");
boolean done=false;
while (!done&&in.hasNext()) {
String line = in.nextLine();
out.println("Echo:"+line);
if(line.trim().equals("BYE"))
done=true;

}
} catch (Exception e) {
// TODO: handle exception
}
finally {
incoming.close();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private Socket incoming;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 技术 服务器 线程