/*
ServerPool.java
author@cczxsong
/*/
package EchoThreadPool;
import java.io.*;
import java.net.Socket;
public class ServerPool extends Thread {
Socket socket = null;
public ServerPool(Socket socket) {
this.socket = socket;
}
@Override
public void run(){
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
OutputStream os=null;
PrintWriter pw=null;
try {
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
os = socket.getOutputStream();
pw = new PrintWriter(os);
String info=null;
while((info=br.readLine())!=null){
System.out.println("Message from client:"+info);
pw.println(info);
pw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(pw!=null)
pw.close();
if(os!=null)
os.close();
if(br!=null)
br.close();
if(isr!=null)
isr.close();
if(is!=null)
is.close();
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
Server.java
author@cczxsong
/*/
package EchoThreadPool;
import java.net.*;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8888);
// 構造一個線程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(3, 5, 3,TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(3));
System.out.println("服務端已啓動,等待客戶端連接..");
while (true) {
Socket socket = server.accept();// 偵聽並接受到此套接字的連接,返回一個Socket對象
ServerPool socketThread = new ServerPool(socket);
threadPool.execute(socketThread);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
Client.java
author@cczxsong
/*/
package EchoThreadPool;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception {
String userInput = null;
String echoMessage = null;
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
Socket socket = new Socket("127.0.0.1", 8888);
System.out.println("Connected to Server");
InputStream inStream = socket.getInputStream();
OutputStream outStream = socket.getOutputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inStream));
PrintWriter out = new PrintWriter(outStream);
while((userInput=stdIn.readLine())!=null)
{
out.println(userInput);
out.flush();
echoMessage = in.readLine();
System.out.println("Echo from server: " + echoMessage);
}
socket.close();
}
}
基於TCp協議的Client-server通信-------線程池版