JAVA通訊(三)——實現多人聊天
前面我們是已經實現了客戶端和伺服器的通訊,但是還存在著一個問題,那就是伺服器一次只能跟一個客戶端通訊。通俗講就是你使用QQ時一次只能和一個人聊天。今天我們繼續完善一下這個通訊程式,實現多人聊天。
一、多執行緒
如果我們要實現多人聊天,那麼我們就必須為每一個客戶機建立一個執行緒。這個執行緒用來處理伺服器和當前客戶機的通訊。過程圖如下:
二、具體程式碼
在前面兩篇部落格的程式碼基礎我們對其進行改進,使其成為一個多執行緒的程式。
package communicatetest3;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//定義一個通訊類
public class ServerThread extends Thread {
OutputStream output;//輸出流
InputStream input;//輸入流
Socket socket;//定義一個socket接收物件的屬性
//執行緒建立方法
public void run() {
try {
System.out.println("已啟動一個執行緒來處理~");
//為輸入輸出流賦值
output=socket.getOutputStream();
input=socket.getInputStream();
//開始通訊
//傳送資訊給客戶機
String outS="Hello,welcome to my ServerSocket!\r\n";
out(outS);
//傳送資訊給伺服器
ReadString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//定義一個建立伺服器的方法
private void setUpServer(int port) throws IOException {
//將輸入的埠設定為伺服器
ServerSocket server=new ServerSocket(port);
//輸出當前伺服器的埠號
System.out.println("伺服器建立成功,埠號:"+server.getLocalPort());
while(true) {
ServerThread ts=new ServerThread();
//為物件的socket屬性賦值。
ts.socket=server.accept();
//啟動執行緒
ts.start();
}
}
//定義一個輸出資訊到客戶機的方法
private void out(String outS) throws IOException {
//將字串轉化為byte陣列
byte[] dataout=outS.getBytes();
//呼叫write()將資訊傳送客戶機
output.write(dataout);
//強制輸出到命令列的介面中
output.flush();
}
//定義一個傳送字串給伺服器的方法
public void ReadString() throws IOException {
String inputS="";
while(!inputS.equals("bye")) {
//讀取第一個字元
int AsciiNumber=input.read();
while(AsciiNumber!=13) {
//將ascii碼轉化為相應的char型字元
inputS+=(char)AsciiNumber;
//接收下一個字元
AsciiNumber=input.read();
}
System.out.println(inputS);
}
//關閉連線
output.close();
}
//主函式入口
public static void main(String[] args) throws IOException {
//建立一個通訊類的物件
ServerThread server=new ServerThread();
server.setUpServer(9014);
}
}
三、命令列執行結果
從執行結果我們會發現程式已經可以進行多人聊天了~
相關文章
- Android端實現多人音視訊聊天應用(二):多人視訊通話Android
- Android端實現多人音視訊聊天應用(一)Android
- 【從頭到腳】前端實現多人視訊聊天— WebRTC 實戰(多人篇)| 掘金技術徵文前端Web
- js程式碼實現多人聊天室JS
- Java建立 多人聊天室Java
- java實現UDP通訊JavaUDP
- 基於聲網 Flutter SDK 實現多人視訊通話Flutter
- 使用Java實現WebSocket通訊JavaWeb
- Java實現TCP通訊程式JavaTCP
- webscoket+jsp實現簡單的多人聊天頁面WebJS
- Python基於Socket實現簡易多人聊天室Python
- 在相親原始碼的多人音視訊聊天中插入現場直播的實現方式原始碼
- WebRTC現狀以及多人視訊通話分析Web
- JAVASE網路程式設計之TCP實現聊天通訊Java程式設計TCP
- Java指令碼實現在微信聊天框發訊息Java指令碼
- Java進階:基於TCP通訊的網路實時聊天室JavaTCP
- JAVA通訊(二)——實現客戶機和伺服器通訊Java伺服器
- Java用UDP實現簡單聊天JavaUDP
- 【從頭到腳】擼一個多人視訊聊天 — 前端 WebRTC 實戰(一)前端Web
- Java的通過管道來實現執行緒通訊Java執行緒
- SpringBoot整合開源IM框架MobileIMSDK,實現即時通訊IM聊天功能Spring Boot框架
- “兩行”程式碼,幫你快速實現FaceTime的新多人視訊通話效果
- 簡單的Java實現Netty進行通訊JavaNetty
- Go語言專案實戰:多人聊天室Go
- 在 Flutter 多人視訊通話中實現虛擬背景、美顏與空間音效Flutter
- 網路通訊2:TCP通訊實現TCP
- Java Websocket實現即時通訊功能入門教程JavaWeb
- Thinking in Java--使用NIO實現非阻塞Socket通訊ThinkingJava
- Java實現RS485串列埠通訊Java串列埠
- 原生JAVA即時通訊系統原始碼語音視訊聊天軟體Java原始碼
- 匿名管道通訊實現
- eddChat即時通訊(聊天系統)
- IM即時通訊聊天社交APP VX 聊天語音視訊系統APP
- Thinking in Java---執行緒通訊+三種方式實現生產者消費者問題ThinkingJava執行緒
- 即時通訊視訊聊天原理是什麼
- angular + express 實現websocket通訊AngularExpressWeb
- golang實現子程式通訊Golang
- 通過 App Groups 實現程式間通訊APP