如何在c ++ builder 6

时间:2016-03-28 12:49:41

标签: c++ sockets builder clients

我想知道如何为我的在线游戏绑定两台计算机。

我使用服务器套接字和客户端套接字制作它,它的工作原理。但是如果不知道该程序在哪里运行,我怎么能这样做呢。所以我无法连接,因为我不知道谁是服务器。我被告知我可以发送广播信息,但现在是我无休止尝试的第三天......

我试着这样写(c ++ builder 6):

ClientSocket->Socket->SendText("Message");

地址和主机是192.168.0.255; 我在同一台计算机上同时运行两次,但它不起作用(因为我不知道该怎么做))。

请帮我找到事先不知道的服务器。

1 个答案:

答案 0 :(得分:1)

  

我被告知可以发送广播消息

这是一种方法,是的(这不是唯一的方法)。但是,这仅在客户端PC和服务器PC连接到同一网络时才有效。

服务器应用程序可以打开两个侦听套接字,一个用于TCP,一个用于UDP(仅限IPv4)或多播(IPv4或IPv6)。 IPv6不支持UDP广播,因此您必须使用多播。

客户端应用程序可以:

  1. 对于UDP,使用与其连接的子网的广播IPv4地址向UDP端口发送消息。该消息将传递到连接到该子网的每个设备。如果服务器PC连接到同一子网并且服务器应用程序接收到广播消息,则它可以将回复发送回发送广播的IPv4地址。当客户端应用程序收到回复时,它将知道发送回复的IPv4地址。

  2. 对于Multicast,订阅服务器PC的多播组地址。服务器可以定期将其当前IP地址发送给该组,并且订阅该组的任何客户端都将接收该IP地址。当客户端收到消息时,它将知道发送消息的IP地址。

  3. 客户端发现服务器的IP地址后,可以使用TCP端口将其TCP客户端套接字连接到该IP地址。

    如果两台PC不在同一网络上(即它们通过Internet连接),则上述内容不适用。服务器必须在客户端可以找到的位置发布其当前IP地址,例如在公共网站或动态DNS服务上。

    当然,最简单的解决方案是向服务器管理员询问服务器当前的TCP IP /端口,然后根据需要将其输入到客户端应用程序的配置中。

      

    我试着这样写(c ++ builder 6):
      ClientSocket->插座 - > SendText( “消息”);

    TClientSocket使用TCP / IP。要使用UDP发送子网广播,您需要使用UDP组件。 C ++ Builder 6附带FastNetTNMUDP组件,IndyTIdUDPClientTIdUDPServer组件。或者,您可以直接使用WinSock API编写自己的UDP套接字代码。

    Indy还提供多播

      

    地址和主机是192.168.0.255

    这是具有255.255.255.0子网掩码的IPv4 192.168.0.x子网的广播IP地址。如果这是您的实际子网配置,并且您的客户端和服务器PC都连接到192.168.0.x子网,则是,您可以向该IP地址发送UDP广播消息。

    要获取子网广播IP地址,您可以:

    1. 手动计算。使用GetAdaptersInfo()GetAdaptersAddresses()获取本地PC的当前IPv4地址和子网掩码,然后使用AND运算符使用子网掩码的位掩码IP地址的位,然后OR结果与网络掩码的反位。

    2. 问Windows。创建一个套接字并bind()到所需的本地网络适配器。然后使用WSAIoctl(SIO_GET_BROADCAST_ADDRESS)查询与该网络关联的广播IP地址。