如何从服务器连接两个客户端

时间:2011-10-18 13:53:32

标签: java multithreading sockets

我正在尝试使用Java创建一个简单的聊天程序。我已经创建了接受多个客户端的TCP服务器。目前客户端消息发送到服务器。

  1. 如何将消息从一个客户端广播到所有其他客户端?
  2. 我如何配对两个客户端。向彼此发送和接收消息?

4 个答案:

答案 0 :(得分:2)

您可以通过简单的套接字与客户进行通信。一旦服务器发送了客户端的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;

然后,您可以使用发送和接收功能在您的客户端之间发送和接收。

答案 1 :(得分:1)

  

1.如何将消息从一个客户端广播到所有其他客户端?

使用订阅/通知机制

  

2.如何配对两个客户端。向对方发送和接收消息?

客户端也必须具有服务器套接字侦听。

<强>更新
您的服务器将具有某种注册表,其中所有客户都注册通知 客户端打开一个等待消息的服务器套接字 当客户端想要发送消息然后它连接到服务器,发送消息,服务器可以将消息发送到所有已注册的客户端或应该接收消息的特定客户端。此部分服务器连接到客户端的服务器套接字并发送消息 另一个选择是不在客户端打开服务器套接字,但客户端进行轮询以查看服务器是否有可用消息

答案 2 :(得分:1)

您应该在此使用多线程概念。 我认为这个链接会有所帮助。 http://pirate.shu.edu/~wachsmut/Teaching/CSAS2214/Virtual/Lectures/chat-client-server.html

答案 3 :(得分:0)

  1. 创建一个将处理要接受的ServerSocket的线程 连接。
  2. 让客户端向服务器发送唯一标识符 连接。
  3. 当客户端发送消息时,请使用所需接收者的ID 客户端作为参数,或为空发送给所有客户端。