2014-10-06 3 views
0

Я использую библиотеку Synapse с Lazarus, и я пытаюсь переключить соединение TCPBlockSocket между двумя разными IP-адресами.Закрытие соединения и повторное открытие с помощью Synapse в Lazarus

создать сокет-соединение с:

mySocket:=TTCPBlockSocket.Create 

Затем я подключить к первому IP-адресу с:

mySocket.Connect(firstIPaddress,portNumber); 

Это прекрасно работает, но при попытке перейти ко второму IP-адресу с

mySocket.Connect(secondIPaddress,portNumber); 

любые данные, я посылаю с mySocket.SendString() все равно отправляется firstIPaddress.

Я попытался .Destroy ING mySocket и воссоздавать его, но я получаю аварии (я проверяю, если mySocket назначается и если это сделать .Destory прежде, чем воссоздавать TCPBlockSocket объект -., Но это кажется немного тяжелой в любом случае

ли есть правильный путь, чтобы отключить и затем снова подключить к выходящей TCPBlockSocket на другой IP-адрес?

и есть простой способ проверить, если TCPBLockSocket имеет активную и рабочую связь?

+0

Я имел взгляд на http://stackoverflow.com/questions/13045943/delphi -synapse-how-to-check-if-i-am-still-connected для второго вопроса выше, но '(mySocket.Socket = INVALID_SOCKET) или ((mySocket.WaitingData = 0) и mySocket.CanRead (0)) 'всегда возвращает false, хотя у меня есть хорошая связь ... –

+0

После дальнейшего исследования кажется, что это' .CanRead (0) 'возвращает' false' каждый раз и заставляет вызов возвращать 'false' - even хотя соединение хорошее. –

ответ

1

это очевидно, когда вы найдете его ...

Прежде чем звонить .Connect, необходимо позвонить по номеру mySocket.CloseSocket() с новым IP-адресом и портом.

(Неподвижные проблемы проверки, если открыто соединение остается открытым и работает, хотя - в соответствии с моим комментарием к ОП)

 Смежные вопросы

  • Нет связанных вопросов^_^