[英]communication through socket: one server and two clients
我有三個實體:A,B和C。A是服務器,而B和C是客戶端。 A是使用java.net
的類實現的多線程服務器
我會實現一種通信,其中B向A發送消息,A向C發送消息,C向B發送消息。我的問題是:客戶端C甚至必須是服務器,或者只能是轉發消息的客戶端?
public class ServerA{
public static void main(String[] args){
boolean listening = true;
int port_number = 8888;
try{
ServerSocket ss = new ServerSocket(port_number);
System.out.println("Waiting for incoming connection...");
while(listening){
new Thread(new ServerThread(ss.accept())).start();
}
}
catch(IOException ioe){ioe.printStackTrace();}
}
}
public class ServerThread implements Runnable{
@Override
public void run(){
}
}
您是否有任何特定原因想要設計這樣的體系結構?
回答您的問題:讓我們考慮一下。 從客戶端C向客戶端B發送消息需要什么? 您想如何實施? 您在評論中提到了一個渠道-但是您究竟需要在兩個客戶之間打開一個“渠道”嗎? 您需要以某種方式知道其(客戶端B的)位置以及端口B正在監聽的端口(最壞的情況是每個客戶端都知道所有/某些其他客戶端,更好的方法是在主服務器上查詢其他客戶端的列表/與所有客戶端都有某種注冊表)。 同樣,顯然,客戶端B需要打開端口並等待消息。
因此,基本上,客戶端C向服務器A查詢某事,獲取響應,然后(通過套接字)向客戶端B發送消息,客戶端B必須在監聽該消息(就像客戶端A一樣)。 這基本上就是服務器客戶端所做的。
如果您知道它將在LAN或類似設備中,則可以考慮使用UDP而不是TCP,但是由於它不那么可靠,因此您需要自己管理更多事情。
這種體系結構使我更想起了具有單個服務器的對等網絡(其中所有“客戶端”都更像是客戶端與服務器的組合),可以從某處獲取數據/進行一些計算。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.