更新時(shí)間:2022-07-06 11:30:30 來源:動(dòng)力節(jié)點(diǎn) 瀏覽5376次
動(dòng)力節(jié)點(diǎn)小編來告訴大家利用java socket實(shí)現(xiàn)簡(jiǎn)單即時(shí)通訊的方法。
1.socket服務(wù)器
/**
* @Description 即時(shí)消息服務(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ù)器已啟動(dòng)");
// 與客戶端建立socket連接
Socket socket = server.accept();
System.out.println("客戶端請(qǐng)求,創(chuàng)建連接成功");
// 寫出器
PrintWriter writer2Client = new PrintWriter(socket.getOutputStream());
writer2Client.write("連接創(chuàng)建成功\r\n");
writer2Client.flush();
// 客戶端讀入器
Scanner scanner4Client = new Scanner(socket.getInputStream());
// 控制臺(tái)讀入器
Scanner scanner4Console = new Scanner(System.in);
// 等待客戶端輸入
while(true) {
// 讀取客戶端消息并打印
String msg4Client = scanner4Client.nextLine();
System.out.println("客戶端:" + msg4Client);
System.out.print("服務(wù)端:");
// 獲取控制臺(tái)輸入數(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 即時(shí)消息客戶端
* @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());
// 控制臺(tái)讀入器
Scanner scanner4Console = new Scanner(System.in);
System.out.println("連接成功,等待服務(wù)器響應(yīng)");
// 等待服務(wù)器控制臺(tái)輸入
while(true) {
// 讀取服務(wù)器響應(yīng)并打印
String msg4Server = scanner4Server.next();
System.out.println("服務(wù)器:" + msg4Server);
System.out.printf("\n客戶端:");
// 客戶端讀取控制臺(tái)輸入,并發(fā)送到服務(wù)器
String msg4Console = scanner4Console.nextLine();
printWriter.write(msg4Console + "\r\n");
printWriter.flush();
}
} catch (Exception e) {
throw new MyRunTimeException("客戶端通訊失敗, 異常信息=" + e.getMessage());
}
}
}
3.通訊效果
4.注意事項(xiàng)
發(fā)送消息的時(shí)候,一定要加上回車和換行符(\r\n),不然 scanner.nextLine() 無法識(shí)別到一行的結(jié)束,就會(huì)一直阻塞。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743