客户端到套接字编程中的客户端消息

时间:2014-12-17 17:36:00

标签: c++ sockets client server

我正在开发一个项目,它是一个基于C ++的WinSock的服务器 - 客户端应用程序。我已经完成了在服务器和客户端之间进行通信所需的一切,我能够在它们之间发送和接收消息。

现在我需要知道如何完成客户端到客户端的消息传递部分以及如何完成工作。我只知道,例如,如果客户端A和客户端B需要相互通信,客户端A必须将消息发送到服务器,服务器接收消息并将其发送给客户端B.

如果这是正确的方法,请帮助我知道服务器应该如何知道接收器的任何内容(在这种情况下是客户端B)?

如果我没有清楚地解释我的问题,请告诉我。

感谢任何帮助。

3 个答案:

答案 0 :(得分:7)

实现此目的的一种方法是让客户端之一在通过实际服务器进行某些通信之后充当服务器。您需要创建自己的协议。话虽如此:

1-客户A:-Hey,Server!。告诉客户B创建一个comm服务器,以便我可以直接与他沟通。

2-服务器:-Hey,客户B!启动服务器实例并告诉我连接属性,以便我可以将其转发给客户端A,以便他可以连接到您。

3-客户B:-Hey,Server!。我已准备好接受客户A的连接请求。这是我的连接属性...

4-服务器:-Client A !!这里是客户B的连接属性。接受或离开它......我已经完成了..

5-客户A:-Hey,服务器B!..我可以连接吗?..

这就是协议..所以任何客户端首先向服务器发起一个请求,其中包含消息类型" me,请求连接到客户端x .."。服务器命令客户端x,客户端x响应,服务器中继响应发起者客户端......还应该实现错误处理,拒绝策略或其他一些你能想到的事情来管理整个协议。

答案 1 :(得分:3)

  1. 客户端A与服务器通信。
  2. 客户B与服务器通信。
  3. 服务器确定A需要直接与B通话,反之亦然。
  4. 服务器向A和B发送一条消息,其中包含如何相互通信的详细信息(IP地址,端口等)。消息还详细说明哪些(A或B)将启动联系,超时等。
  5. 收到后,每个A和B开始侦听服务器详细说明的端口。
  6. 无论是谁在消息中设置发起联系,都是这样做的(A与B对话,反之亦然)。
  7. 除非我完全错过了问题的重点。您需要定义一些新消息,其中包含A和B所需的所有详细信息,并将其发送到A和B,他们需要接收/处理消息并做出相应的反应。

答案 2 :(得分:1)

将客户端 - 服务器通信视为旧的无线电通信。

  1. A需要与B交谈,所以B必须正在倾听
  2. A完成演讲(您只需发送一个关键字,例如' // EOC',或使用固定宽度的邮件)。
  3. B需要与A交谈,所以A一定不能说话,让B跟A谈话
  4. 迭代直到通信结束命令

    所以想象一下,演讲是write,而听是read

     B:  read  -> A:  write 
     A:  read  -> B:  write 
    

    请记住使用关键字断开2个客户端,否则系统调用可能会有一些不良行为