1. 服务端
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
@Configuration
public class TcpServer {
ServerSocket serverSocket1 = null;
ServerSocket serverSocket2 = null;
Socket socket1 = null;
Socket socket2 = null;
@Bean(name = "server1")
public void server() throws Exception{
try {
//建立服务器的Socket,并设定一个监听的端口PORT
serverSocket1 = new ServerSocket(7788);
serverSocket2 = new ServerSocket(7789);
//由于需要进行循环监听,因此获取消息的操作应放在一个while大循环中
while(true){
try {
//建立跟客户端的连接
socket1 = serverSocket1.accept();
socket2 = serverSocket2.accept();
} catch (Exception e) {
System.out.println("建立与客户端的连接出现异常");
e.printStackTrace();
}
Runnable thread = (Runnable) () -> {
try {
InputStream inputStream = null;
OutputStream outputStream = null;
inputStream = socket1.getInputStream();
byte[] bytes = new byte[1024];
inputStream.read(bytes);
String string = new String(bytes, "UTF-8");//解决乱码的问题
System.out.println(string.trim());//解决byte数组为空或者填不满的问题
//向客户端发送消息
outputStream = socket1.getOutputStream();
outputStream.write("SERVER1".getBytes());
}catch (Exception e){
e.printStackTrace();
}
};
thread.run();
Runnable thread1 = (Runnable) () -> {
try {
InputStream inputStream = null;
OutputStream outputStream = null;
inputStream = socket2.getInputStream();
byte[] bytes = new byte[1024];
inputStream.read(bytes);
String string = new String(bytes, "UTF-8");//解决乱码的问题
System.out.println(string.trim());//解决byte数组为空或者填不满的问题
//向客户端发送消息
outputStream = socket2.getOutputStream();
outputStream.write("SERVER2".getBytes());
}catch (Exception e){
e.printStackTrace();
}
};
thread1.run();
}
} catch (Exception e) {
System.out.println("端口被占用");
e.printStackTrace();
} finally {
serverSocket1.close();
serverSocket2.close();
}
}
}
2. 测试客户端
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class Test {
public static void main(String[] args) {
Socket socket1 = null;
Socket socket2 = null;
BufferedWriter writer1 = null;
BufferedWriter writer2 = null;
try {
socket1 = new Socket("127.0.0.1", 7788);
socket2 = new Socket("127.0.0.1", 7789);
OutputStream out1 = socket1.getOutputStream();
OutputStream out2 = socket2.getOutputStream();
writer1 = new BufferedWriter(new OutputStreamWriter(out1));
writer2 = new BufferedWriter(new OutputStreamWriter(out2));
for (int i = 0; i < 50; i++) {
writer1.write("hello11");
writer1.newLine();
writer1.flush();
}
for (int i = 0; i < 50; i++) {
writer2.write("hello22");
writer2.newLine();
writer2.flush();
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if(writer1 != null){
writer1.close();
}
if(socket1 != null){
socket1.close();
}
if(writer2 != null){
writer2.close();
}
if(socket2 != null){
socket2.close();
}
}catch (Exception e1){
e1.printStackTrace();
}
}
}
}