【问题标题】:How to connect two clients from the server如何从服务器连接两个客户端
【发布时间】:2011-10-18 13:53:32
【问题描述】:

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

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

【问题讨论】:

  • 您是否正在尝试进行点对点聊天?
  • 是的。客户端到服务器到客户端的连接

标签: java multithreading sockets


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    使用订阅/通知机制

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

    客户端也必须有一个服务器套接字监听。

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

    【讨论】:

    • 客户端有socket监听。如何将客户端与服务器中的每个 otehr 连接起来?
    • 客户端连接到服务器的套接字并向服务器发送消息。您还必须向客户端打开服务器套接字,以便它可以接受来自其他客户端/对等方的连接。除非您想使用服务器作为中介。你想做什么?
    • 是的。我希望服务器调解通信,因为任何用户都可以尝试连接到任何其他用户。服务器会找到正确的目标,然后加入他们。
    • 据此更新答案
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      1. 创建一个线程来处理要接受的 ServerSocket 连接。
      2. 让客户端发送一个唯一的标识符到服务器 连接。
      3. 当客户端发送消息时,使用所需接收者的 id 客户端作为参数,或为空发送给所有客户端。

      【讨论】:

        猜你喜欢
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 2016-07-06
        • 2016-07-22
        • 2019-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多