1.项目结构
分为三部分:socket服务端、2个socket客户端、消息实体类,启动顺序为:socket服务端、2个socket客户端。
2.各模块代码
- MySocketServer.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.stream.Collectors;
public class MySocketServer{
private int port = 6666;
private InputStream inputStream;
private Socket socket;
ServerSocket serverSocket = null;
MySocketServer(){
try {
serverSocket = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
}
//建立socket监听
private void creatListener() throws IOException{
//阻塞,等待连接建立并返回实例
socket = serverSocket.accept();
inputStream = socket.getInputStream();
//解析输入流数据
String msg = new BufferedReader(
new InputStreamReader(inputStream)).lines().collect(Collectors.joining(System.lineSeparator()));
System.out.println(msg);
inputStream.close();
//循环调用再次建立连接
creatListener();
socket.close();
serverSocket.close();
}
public static void main(String args[]) throws IOException {
MySocketServer mySocketServer = new MySocketServer();
mySocketServer.creatListener();
}
}
- MySocketClient0.java
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Date;
import java.util.Scanner;
public class MySocketClient0 {
private MessagegBean messagegBean;
private MySocketClient0(MessagegBean messagegBean){
this.messagegBean = messagegBean;
}
private void sendMsg() throws IOException {
String ConnectionHost = "127.0.0.1";
int ConnectionPort = 6666;
Socket socket = new Socket(ConnectionHost,ConnectionPort);
OutputStream outputStream = socket.getOutputStream();
//接收输入
messagegBean.setMessages(new Scanner(System.in).next());
messagegBean.setCurrentDate(new Date());
outputStream.write(messagegBean.toString().getBytes());
outputStream.close();
socket.close();
//循环再次发送消息
sendMsg();
}
public static void main(String[] args) throws IOException {
MessagegBean messagegBean0 = new MessagegBean();
messagegBean0.setUserName("client");
MySocketClient0 mySocketClient = new MySocketClient0(messagegBean0);
mySocketClient.sendMsg();
}
}
- MySocketClient1.java
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Scanner;
public class MySocketClient1 {
private MessagegBean messagegBean;
private MySocketClient1(MessagegBean messagegBean){
this.messagegBean = messagegBean;
}
private void sendMsg() throws IOException {
String ConnectionHost = "127.0.0.1";
int ConnectionPort = 6666;
Socket socket = new Socket(ConnectionHost,ConnectionPort);
OutputStream outputStream = socket.getOutputStream();
//接收输入
messagegBean.setMessages(new Scanner(System.in).next());
messagegBean.setCurrentDate(new Date());
outputStream.write(messagegBean.toString().getBytes());
outputStream.close();
socket.close();
//循环再次发送消息
sendMsg();
}
public static void main(String[] args) throws IOException {
MessagegBean messagegBean1 = new MessagegBean();
messagegBean1.setUserName("client1");
MySocketClient1 mySocketClient = new MySocketClient1(messagegBean1);
mySocketClient.sendMsg();
}
}
- MessagegBean.java
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MessagegBean implements Serializable {
private Date currentDate;
private String userName;
private String messages;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
StringBuilder stringBuilder;
public Date getCurrentDate() {
return currentDate;
}
public void setCurrentDate(Date currentDate) {
this.currentDate = currentDate;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getMessages() {
return messages;
}
public void setMessages(String messages) {
this.messages = messages;
}
@Override
public String toString() {
stringBuilder = new StringBuilder();
stringBuilder
.append(dateFormat.format(this.currentDate))
.append("\n")
.append(userName)
.append(":")
.append(messages);
return stringBuilder.toString();
}
}
3.控制台输出
client0输入:
client1输入:
server输出: