Java中网络编程之TCP协议 (四)

2014-11-24 10:57:57 · 作者: · 浏览: 3
m socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void run()
{
try
{
BufferedReader br = getReader(socket);
String msg = null;
while ((msg = br.readLine()) != null)
{
System.out.println("客户端的IP:" + socket.getInetAddress().getHostAddress());
System.out.println("客户端的端口:" + socket.getPort());
System.out.println("客户端的信息:" + msg);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (socket != null)
{
socket.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
/**
* 多线程服务端1
*/
public class MultiThreadServer1
{
// 端口号
private int port = 8821;
// 服务端
private ServerSocket serverSocket;
// 线程池
private ExecutorService executorService;
// 单个CPU线程池大小
private final int POOL_SIZE = 10;
public MultiThreadServer1() throws IOException
{
// 创建服务器端
serverSocket = new ServerSocket(port);
// 获取当前系统的CPU数目
int cpuNums = Runtime.getRuntime().availableProcessors();
// 根据系统资源情况灵活定义线程池大小
executorService = Executors.newFixedThreadPool(cpuNums * POOL_SIZE);
System.out.println("服务器启动");
}
public void service()
{
while (true)
{
Socket socket = null;
try
{
// 客户进行连接就会触发accept方法从而建立连接
socket = serverSocket.accept();
// 调用线程池操作
executorService.execute(new Handler(socket));
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException
{
new MultiThreadServer1().service();
}
}
/**
* 多线程处理类
*/
class Handler implements Runnable
{
private Socket socket;
public Handler(Socket socket)
{
this.socket = socket;
}
private BufferedReader getReader(Socket socket) throws IOException
{
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void run()
{
try
{
BufferedReader br = getReader(socket);
String msg = null;
while ((msg = br.readLine()) != null)
{
System.out.println("客户端的IP:" + socket.getInetAddress().getHostAddress());
System.out.println("客户端的端口:" + socket.getPort());
System.out.println("客户端的信息:" + msg);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (socket != null)
{
socket.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
两个多线程服务端执行结果相同
服务器启动
客户端的IP:127.0.0.1
客户端的端口:3931
客户端的信息:我是徐越2
客户端的IP:127.0.0.1
客户端的端口:3928
客户端的信息:我是徐越1