Server程序:
package com.ymm.test.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import com.ymm.test.server.threadsPool.ThreadsPool;
public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8989);
while(true){
final Socket socket = server.accept();
ThreadsPool.exeService.submit(new Runnable() {
@Override
public void run() {
InputStream ins = null;
OutputStream ous = null;
try {
ins = socket.getInputStream();
ous = socket.getOutputStream();
} catch (IOException e1) {
e1.printStackTrace();
}
int b = -1;
try {
while ((b = ins.read()) != -1) {
ous.write(b);
System.out.println(new Date().getTime()+ ", Server sent " + b);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
线程池:
package com.ymm.test.server.threadsPool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadsPool {
public static ExecutorService exeService = Executors.newFixedThreadPool(4);
public static ExecutorService connExeService = Executors.newFixedThreadPool(4);
}
连接池:
package com.ymm.test.server.threadsPool;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.Vector;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class ConnectionPool {
public static BlockingQueue<Socket> connectionsPool = new LinkedBlockingQueue<Socket>(4);
static{
try {
for (int i = 0; i < 4; i++) {
Socket socket = new Socket("localhost", 8989);
connectionsPool.add(socket);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
ThreadsPool.connExeService.submit(new Runnable() {
@Override
public void run() {
Socket socket = ConnectionPool.connectionsPool.poll();
try {
OutputStream ous = socket.getOutputStream();
InputStream ins = socket.getInputStream();
ous.write((char)'a');
ous.write((char)'b');
ous.write((char)'c');
ous.write((char)'d');
int b = -1;
while ( (b = ins.read()) != -1) {
System.out.println(new Date().getTime() + ", Client received "+ b);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
}