我正嘗試使用Java創建一個簡單的聊天程序。我已經創建了接受多個客戶端的TCP服務器。目前客戶端發送消息給服務器。如何從服務器連接兩個客戶端
- 如何將消息從一個客戶端廣播到所有其他客戶端?
- 如何配對兩個客戶端。發送和接收消息給海誓山盟?
我正嘗試使用Java創建一個簡單的聊天程序。我已經創建了接受多個客戶端的TCP服務器。目前客戶端發送消息給服務器。如何從服務器連接兩個客戶端
1.如何將消息從一個客戶端廣播到所有其他客戶?
使用訂閱/通知機制
我2.How可以配對兩個客戶機中。發送和接收消息給海誓山盟?
客戶端也必須偵聽服務器套接字。
更新:
您的服務器將有某種註冊表,您的所有客戶端註冊通知。
客戶端打開等待消息的服務器套接字。
當客戶想要發送消息時,它連接到服務器,發送消息,服務器可以將消息發送給所有註冊客戶或發送給應該接收消息的特定客戶。在這部分服務器連接到客戶端的服務器套接字併發送消息。
另一個選項不是在客戶端打開服務器套接字,但客戶端進行輪詢以查看服務器是否有可用消息
您可以使您的客戶端通過簡單的套接字進行通信。一旦服務器發送客戶端的IP,您可以使用客戶端的IP和TCP端口(通常爲443)進行通信。我在C中知道它的完成方式,我不確定你是否可以在你的Java實現中使用它,但類似的東西可以工作。
//#define MSG "GET/HTTP/1.0\r\n\r\n"
char buffer[128]= "0";
struct sockaddr_in sin;
struct hostent *host;
int s;
host = gethostbyname("Clients IP");
memcpy(&(sin.sin_addr), host->h_addr,host->h_length);
//sin.sin_addr.s_addr = inet_addr("175.41.153.196");
sin.sin_family = host->h_addrtype;
//sin.sin_family = AF_INET;
sin.sin_port = htons(443);
// Create socket port 443
s = socket(AF_INET, SOCK_STREAM,0);
// 1. Block for server accept
connect(s, (struct sockaddr*)&sin,sizeof(sin));
// 2. Send "Hello world"
send(s,buffer,strlen(buffer)+1,0);
// 3. Block for receive
recv(s,buffer,sizeof(buffer),0);
// Print received data
close(s);
//return 0;
然後,您可以使用Send和Recv函數在客戶端之間發送和接收數據。
您應該在此使用多線程概念。 我覺得這個鏈接會有幫助。 http://pirate.shu.edu/~wachsmut/Teaching/CSAS2214/Virtual/Lectures/chat-client-server.html
您是否試圖進行點對點聊天? – ewok
是的。客戶端到服務器到客戶端的連接 – explorer