服务端和客户端分开,服务端先绑定了端口,然后就可以实现点对点通信,现在想要服务端给所有客户广播消息,是不是客户端都要绑定在同一个端口上?2端都开了个线程接受消息,现在广播是不是还要再开线程用来接受广播消息?网络编程很生疏,请大家多多指教

解决方案 »

  1.   

    UDP所谓的广播就是每个客户端都发一遍
    你既然已经实现了客户端连接服务器端的通信,可以这样做
    客户端:connect服务器端,发送消息,并用这个socket来recv
    服务器端:recvfrom可以获取客户端地址结构体,就可以直接sendto客户端了
    要想给所有客户端则可以保存地址信息,不过这要建立在客户端socket不关闭的基础上
    另外一种思路差不多就是你想的 客户端也开接收端口
    看你的系统结构决定吧
      

  2.   

    UDP发送广播消息时,如果是在同一个局域网内,,则所有的客户机都会收到,但如果相应的客户机端口并未打开,则会数据包被抛弃掉。如果向指定外网客户端发送udp广播,则一般路由器会直接屏蔽掉作为不安全信息。。除非,之前已经进行过p2p的打洞了。
      

  3.   

    lz说的广播和局域网的广播是2个概念吧。
    你可以在服务器上用一个线程管理所有的客户端,就用select模型就可以。
    需要广播的时候,查询所有记录的客户端的地址,每一个都send一个数据包即可。
      

  4.   

    recvfrom可以获取客户端地址结构体,就可以直接sendto客户端了,那不是要保存所有客户端的地址信息?依次给每个客户端发,那样比较麻烦,我想只发一次.
      

  5.   

    广播的就是只要绑定了相同的端口,且创建的socket具备广播的特定,你在这个端口上广播的消息每个端点都能接收的到。,
      

  6.   

    服务端和客户端分开,服务端先绑定了端口,然后就可以实现点对点通信,现在想要服务端给所有客户广播消息,是不是客户端都要绑定在同一个端口上?客户端都要绑定在同一个端口上?对。2端都开了个线程接受消息,现在广播是不是还要再开线程用来接受广播消息不用,会在你的接收线程里收到。广播一般用来确定位置。如:客户端广播: 天王盖地虎。服务端:(收到客户端广播消息,确定客户端ip,端口)宝塔镇河妖。(发送服务端ip,端口)这里,服务端不需要进行广播。二者建立联系,开始通信数据。
      

  7.   

    LZ想要表达的广播,和TCP/IP里面的广播明显不是同一回事嘛。