Закрытие соединения и повторное открытие с помощью Synapse в Lazarus

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

Я создаю соединение Socket с помощью:

mySocket:=TTCPBlockSocket.Create

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

mySocket.Connect(firstIPaddress,portNumber);

Это отлично работает, но если я попытаюсь переключиться на второй IP-адрес с помощью

mySocket.Connect(secondIPaddress,portNumber);

любые данные, которые я отправляю с помощью mySocket.SendString(), по-прежнему отправляются на firstIPaddress.

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

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

И есть ли простой способ проверить, есть ли у TCPBLockSocket активное и работающее соединение?


person Fat Monk    schedule 06.10.2014    source источник
comment
Я просмотрел stackoverflow.com/questions/13045943/ для второго вопроса выше, но (mySocket.Socket = INVALID_SOCKET) or ((mySocket.WaitingData = 0) and mySocket.CanRead(0)) всегда возвращает false, даже если у меня хорошее соединение...   -  person Fat Monk    schedule 06.10.2014
comment
После дальнейшего изучения кажется, что именно .CanRead(0) каждый раз возвращает false и заставляет вызов возвращать false, даже если соединение хорошее.   -  person Fat Monk    schedule 08.10.2014


Ответы (1)


Сразу видно, когда найдёшь...

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

(Все еще проблемы с проверкой того, открыто ли и работает ли открытое соединение - согласно моему комментарию к OP)

person Fat Monk    schedule 08.10.2014