效果图
服务器代码
public class SocketServer {
private BufferedReader reader = null;//用于读取客户端发来的消息
private BufferedWriter writer = null;//用于发送消息
private BufferedReader inputReader = null;//用于输入消息
public static void main(String[] args) {
SocketServer server = new SocketServer();
server.start();
}
private void start() {
Socket socket = null;
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(9898);
System.out.println("服务器已开启,等待客户端连入");
while(true){
socket = serverSocket.accept();
manageConnect(socket);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
inputReader.close();
reader.close();
writer.close();
serverSocket.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 管理连接
public void manageConnect(final Socket socket) {
new Thread(new Runnable() {
@Override
public void run() {
try {
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
inputReader = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("客户端:"+socket.hashCode()+"已连入");
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
startClientReplyListener(reader,socket);
String serverMsg;
// 发送消息
while (!(serverMsg = inputReader.readLine()).equals("结束聊天")) {
writer.write(serverMsg + "\n");
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
// 监听客户端是否给服务器发送消息
public void startClientReplyListener(final BufferedReader reader,final Socket socket) {
new Thread(new Runnable() {
@Override
public void run() {
String receiveMsg;
try {
while ((receiveMsg = reader.readLine()) != null) {
System.out.println(socket.hashCode()+":" + receiveMsg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
客户端代码
public class SocketClient {
public static void main(String[] args) {
SocketClient client = new SocketClient();
client.start();
}
private void start() {
BufferedReader inputReader = null;// 用于输入消息
BufferedReader reader = null;// 用于读取客户端发来的消息
BufferedWriter writer = null;// 用于发送消息
Socket socket = null;
try {
socket = new Socket("127.0.0.1", 9898);
writer = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
inputReader = new BufferedReader(new InputStreamReader(System.in));
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
startServerReplyListener(reader);
String clientMsg;
// 发送消息
while (!(clientMsg = inputReader.readLine()).equals("结束聊天")) {
writer.write(clientMsg + "\n");
writer.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
inputReader.close();
writer.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 监听服务器是否给客户端发送消息
public void startServerReplyListener(final BufferedReader reader) {
new Thread(new Runnable() {
@Override
public void run() {
String serverMsg;
try {
// 接收消息
while ((serverMsg = reader.readLine()) != null) {
System.out.println("服务器:" + serverMsg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}