效果圖
服務器代碼
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();
}
}