none
Вопрос про socket RRS feed

  • Вопрос

  • Создаю socket:

    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    Устанавливаю соединение:

     socket.Connect(IP_Pull.Url.ip, 2000);

    Далее разрываю соединение:

    socket.Disconnect(true);

    Потом снова пытаюсь соедениться:

    socket.Connect(IP_Pull.Url.ip, 2000);

    Вылетает ошибка:

    После отключения сокета возможно только повторное асинхронное подключение и только к другой конечной точке EndPoint. Необходимо вызвать метод BeginConnect для потока, выход из которого не произойдет до завершения операции.

     

    Но мне нужно синхронное соединение и на этот же адресс. Цель очень проста. Переодически скидывать инфу на сервер. Как сделать? Каждый раз создавать новый socket? Но это не эффективно - зачем каждый раз использовать кучу ресурсов компьютера, когда нужно всего лишь conect/disсonect.

     

     

    15 июня 2011 г. 9:49

Ответы

  • Close - полностью ликвидирует объект. Shutdown  - мутная какаято вещь, запрещает приём/передачу, а объект вроде живой. Вобщем пробывал - то же самое.

    Короче проблему решил - созданием новых сокетов и их удаление. Почему нельзя использовать сокет повторно - для меня осталось загадкой.

    P.S. Сокет умирает примерно 0.5s (на моей далеко не слабой машине) и нельзя использовать его ссылку при создание нового чаще - вылетает ошибка.

    • Помечено в качестве ответа Abolmasov Dmitry 21 июня 2011 г. 6:33
    18 июня 2011 г. 18:11

Все ответы

  • Попробуйте пересоздавать только если произошла ошибка. А если нет - повторно подключаться. Или всегда гарантированно падает?
    Don't forget to vote for useful replies and/or mark answers for your questions - that helps other guys to find the answer faster.
    15 июня 2011 г. 20:24
  • Ошибка возникает всегда. 
    16 июня 2011 г. 12:05
  • Вызывайте метод Shutdown перед вызовом Disconnect. Также посмотрите пример к описанию метода Disconnect - там после закрытия сокета идет проверка: действительно ли сокет отключен или нет. Попробуйте у себя сделать также. Еще вместо Disconnect  можно попробовать Close метод.

     


    Для связи [mail]
    17 июня 2011 г. 13:50
  • Close - полностью ликвидирует объект. Shutdown  - мутная какаято вещь, запрещает приём/передачу, а объект вроде живой. Вобщем пробывал - то же самое.

    Короче проблему решил - созданием новых сокетов и их удаление. Почему нельзя использовать сокет повторно - для меня осталось загадкой.

    P.S. Сокет умирает примерно 0.5s (на моей далеко не слабой машине) и нельзя использовать его ссылку при создание нового чаще - вылетает ошибка.

    • Помечено в качестве ответа Abolmasov Dmitry 21 июня 2011 г. 6:33
    18 июня 2011 г. 18:11