更新時間:2022-07-06 11:30:30 來源:動力節(jié)點 瀏覽5445次
動力節(jié)點小編來告訴大家利用java socket實現(xiàn)簡單即時通訊的方法。
1.socket服務(wù)器
/**
* @Description 即時消息服務(wù)器
* @author xiao tang
* @version 1.0.0
* @createTime 2022年01月23日
*/
public class IMSocketServer {
private static int PORT = 13;
public static void main(String[] args) {
ServerSocket server = null;
try {
// 開啟端口
server = new ServerSocket(PORT);
System.out.println("服務(wù)器已啟動");
// 與客戶端建立socket連接
Socket socket = server.accept();
System.out.println("客戶端請求,創(chuàng)建連接成功");
// 寫出器
PrintWriter writer2Client = new PrintWriter(socket.getOutputStream());
writer2Client.write("連接創(chuàng)建成功\r\n");
writer2Client.flush();
// 客戶端讀入器
Scanner scanner4Client = new Scanner(socket.getInputStream());
// 控制臺讀入器
Scanner scanner4Console = new Scanner(System.in);
// 等待客戶端輸入
while(true) {
// 讀取客戶端消息并打印
String msg4Client = scanner4Client.nextLine();
System.out.println("客戶端:" + msg4Client);
System.out.print("服務(wù)端:");
// 獲取控制臺輸入數(shù)據(jù)并發(fā)送到客戶端
String msg4Console = scanner4Console.nextLine();
writer2Client.write(msg4Console + "\r\n");
writer2Client.flush();
}
} catch (IOException e) {
throw new MyRunTimeException("打開端口socket失敗,端口=" + PORT + ", 異常信息=" + e.getMessage());
} finally {
try {
if (server != null) {
server.close();
}
} catch (Exception e) {
}
}
}
}
2.socket客戶端
/**
* @Description 即時消息客戶端
* @author xiao tang
* @version 1.0.0
* @createTime 2022年01月23日
*/
public class IMSocketClient {
private static int PORT = 13;
public static void main(String[] args) {
try (Socket socket = new Socket()) {
// 與服務(wù)器端建立socket連接
socket.connect(new InetSocketAddress("localhost", PORT), 3000);
// 新建讀取器,寫出器
Scanner scanner4Server = new Scanner(socket.getInputStream());
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
// 控制臺讀入器
Scanner scanner4Console = new Scanner(System.in);
System.out.println("連接成功,等待服務(wù)器響應(yīng)");
// 等待服務(wù)器控制臺輸入
while(true) {
// 讀取服務(wù)器響應(yīng)并打印
String msg4Server = scanner4Server.next();
System.out.println("服務(wù)器:" + msg4Server);
System.out.printf("\n客戶端:");
// 客戶端讀取控制臺輸入,并發(fā)送到服務(wù)器
String msg4Console = scanner4Console.nextLine();
printWriter.write(msg4Console + "\r\n");
printWriter.flush();
}
} catch (Exception e) {
throw new MyRunTimeException("客戶端通訊失敗, 異常信息=" + e.getMessage());
}
}
}
3.通訊效果
4.注意事項
發(fā)送消息的時候,一定要加上回車和換行符(\r\n),不然 scanner.nextLine() 無法識別到一行的結(jié)束,就會一直阻塞。
相關(guān)閱讀