服务端
import org.junit.Test;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
public class TestTcpServer {
private static ExecutorService executor = Executors.newFixedThreadPool(5);
private static AtomicInteger count = new AtomicInteger();
public static void main(String[] args) throws ClassNotFoundException {
ServerSocket ss = null;
Socket s = null;
try {
ss = new ServerSocket(8989);
System.out.println("服务端已经启动...");
while (true) {
int id = count.getAndAdd(1);
executor.execute(new ServerTask(id, ss.accept()));
System.out.println("执行一次响应.." + id);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ss != null) {
try {
ss.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}
}
class ServerTask implements Runnable {
private Integer id;
private Socket socket;
public ServerTask(Integer id, Socket socket) {
this.id = id;
this.socket = socket;
}
public void run() {
ObjectOutputStream os = null;
ObjectInputStream is = null;
try {
is = new ObjectInputStream(socket.getInputStream());
TransportObject transportObject = (TransportObject) is.readObject();
System.out.println(transportObject.toString() + "任务标记:" + id);
transportObject = (TransportObject) is.readObject();
System.out.println(transportObject.toString() + "任务标记:" + id);
os = new ObjectOutputStream(socket.getOutputStream());
os.writeObject(new TransportObject(1, "我是客户端!"));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
客户端
import org.junit.Test;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Random;
public class TestTcpClient {
public static void main(String[] args) throws ClassNotFoundException, InterruptedException {
for (int i = 0; i < 6; i++) {
new Thread() {
@Override
public void run() {
while (true) {
try {
send();
Thread.sleep(100);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} .start();
}
}
private static void send() throws ClassNotFoundException {
Socket socket = null;
ObjectOutputStream os = null;
ObjectInputStream is = null;
try {
socket = new Socket(InetAddress.getByName("127.0.0.1"), 8989);
os = new ObjectOutputStream(socket.getOutputStream());
os.writeObject(new TransportObject(2, "我是客户端1!"));
os.writeObject(new TransportObject(3, "我是客户端2!"));
// shutdownOutput():执行此方法,显示的告诉服务端发送完毕
socket.shutdownOutput();
is = new ObjectInputStream(socket.getInputStream());
TransportObject transportObject = (TransportObject) is.readObject();
System.out.println(transportObject.toString());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}