На стороне сервера предоставленное TIdSocketHandle
в событии OnUDPRead
не «подключено» (с точки зрения ОС) к одноранговому узлу, который отправил полученные данные, поэтому по умолчанию для вызова ABinding->Send()
требуется указание целевого IP / порта для отправки. Вот почему ABinding->Send(ABinding->PeerIP, ABinding->PeerPort, "Hello 2");
работает, а ABinding->Send("Hello 2");
- нет.
Вызов ABinding->Send()
не зависит от свойства ThreadedEvent
сервера любым способом. Это свойство просто контролирует, запускается ли событие сервера OnUDPRead
в контексте в основном потоке пользовательского интерфейса или нет. не влияет на то, как сервер выделяет и управляет своими сокетами.
Однако, если свойство ThreadedEvent
сервера имеет значение false и клиент и сервер работают в одном и том же процессе приложения, сервер не сможет запустить событие OnUDPRead
, пока работает Button1Click()
. В этой ситуации вам нужно будет установить для ThreadedEvent
значение true, чтобы вместо этого OnUDPRead
вызывалось в контексте рабочего потока, а не в основном потоке пользовательского интерфейса.
В противном случае переместите клиент в его собственный рабочий поток.