Нелегко перечислить полный список IP-адресов в вашей локальной сети, по крайней мере, не на уровне необработанного TCP / IP, который вы изначально запрашивали (список IP-адресов).Затем вы обновили вопрос, чтобы спросить об отправке сообщения на все подключенные машины.Выше есть комментарий, в котором рекомендуется использовать для этого информацию NETSTAT, но я не уверен, что это будет надежным решением для того, что вы хотите сделать.
Причина № 1, почему трудно перечислять IP-адреса из-за того, что многиеподключенные компьютеры вообще не будут отвечать ни на что, включая Ping.Вторая проблема заключается в том, что вам придется транслировать по всем локальным адресам, если вы хотите перечислить компьютеры в текущем сегменте, и это займет много времени и не будет полным, поскольку вполне возможно, что сегмент вашей локальной сети мог быиметь несколько наборов IP-адресов, возможно, в нескольких разных подсетях private-ip и в одной или нескольких подсетях public-ip.
Если вы создаете игру и написали игровой сервер на основе TCP, ваша играСервер знает, кто в данный момент подключен к серверу, и вы сможете проходить активные сеансы.Код для этого будет другим для Indy, ICS, Synapse или любой другой библиотеки, которую вы используете для написания кода вашего сервера протокола TCP / IP или UDP.Вы можете использовать широковещательное UDP-сообщение , но это может быть неправильным решением для некоторых игровых систем.Представьте, что вы используете два сервера на одном компьютере, и некоторые игроки подключены к каждому.Решение, ориентированное на соединение, является более надежным.Ваши клиенты могут по-прежнему использовать UDP и могут опрашивать сервер, к которому они подключены, и получать уведомления о событиях с помощью флагов в вашем протоколе.Это было бы гораздо надежнее, чем попытка многоадресной передачи или широковещательной передачи в ЛВС.
Однако Synapse поддерживает синтаксис широковещательной передачи, если вы настаиваете:
socket := TUDPBlockSocket.create;
socket.enablebroadcast(true);
socket.Connect('255.255.255.255', '12345')
socket.SendBufferTo(@DATARECORD, SIZEOF(DATARECORD));