Сообщение Re[3]: Помогите понять причину ошибки (unable to write data от 22.06.2015 14:04
Изменено 22.06.2015 14:05 v_andal
Здравствуйте, breee breee, Вы писали:
BB>Здравствуйте, v_andal, Вы писали:
_>>Хотелось бы знать, как происходит отправка и чтение данных в клиенте? Сообщение отправить, сообщение прочесть? Или отправить 100 сообщений, читать ответы по мере поступления?
BB>У клиента есть два потока: в одном сообщения отправляются в цикле, в другом — читаются, тоже в цикле. Согласно документации NetworkStream — это допустимо.
_>>Сервер когда читает, как определяет границы сообщений?
BB>Все сообщения начинаются с фиксированной длины, затем идет переменное тело. Сервер сначала читает длину, затем само тело.
То есть у сервера только один поток? А сервер учитывает, что он может прочесть только кусок сообщения? Потенциально, он и при записи может отправить только часть из отправляемых данных.
В принципе, если сообщения не очень большие, можно весь обмен каким-нибудь wireshark перехватить и посмотреть, что происходит на уровне сети. Если на этом уровне соединение не пропадает, то значит баг в библиотеке или программе. Если же соединение рубится на уровне сети, то значит клиент его почему-то закрывает.
Если бы дело было под никсами, то я бы порекомендовал подцепить strace и посмотреть на уровне системных вызовов. Есть ли подобная утилита для виндов, я не знаю.
BB>Здравствуйте, v_andal, Вы писали:
_>>Хотелось бы знать, как происходит отправка и чтение данных в клиенте? Сообщение отправить, сообщение прочесть? Или отправить 100 сообщений, читать ответы по мере поступления?
BB>У клиента есть два потока: в одном сообщения отправляются в цикле, в другом — читаются, тоже в цикле. Согласно документации NetworkStream — это допустимо.
_>>Сервер когда читает, как определяет границы сообщений?
BB>Все сообщения начинаются с фиксированной длины, затем идет переменное тело. Сервер сначала читает длину, затем само тело.
То есть у сервера только один поток? А сервер учитывает, что он может прочесть только кусок сообщения? Потенциально, он и при записи может отправить только часть из отправляемых данных.
В принципе, если сообщения не очень большие, можно весь обмен каким-нибудь wireshark перехватить и посмотреть, что происходит на уровне сети. Если на этом уровне соединение не пропадает, то значит баг в библиотеке или программе. Если же соединение рубится на уровне сети, то значит клиент его почему-то закрывает.
Если бы дело было под никсами, то я бы порекомендовал подцепить strace и посмотреть на уровне системных вызовов. Есть ли подобная утилита для виндов, я не знаю.
Re[3]: Помогите понять причину ошибки (unable to write data
Здравствуйте, breee breee, Вы писали:
BB>Здравствуйте, v_andal, Вы писали:
_>>Хотелось бы знать, как происходит отправка и чтение данных в клиенте? Сообщение отправить, сообщение прочесть? Или отправить 100 сообщений, читать ответы по мере поступления?
BB>У клиента есть два потока: в одном сообщения отправляются в цикле, в другом — читаются, тоже в цикле. Согласно документации NetworkStream — это допустимо.
_>>Сервер когда читает, как определяет границы сообщений?
BB>Все сообщения начинаются с фиксированной длины, затем идет переменное тело. Сервер сначала читает длину, затем само тело.
То есть у сервера только один поток? А сервер учитывает, что он может прочесть только кусок сообщения за раз? Потенциально, он и при записи может отправить только часть из отправляемых данных.
В принципе, если сообщения не очень большие, можно весь обмен каким-нибудь wireshark перехватить и посмотреть, что происходит на уровне сети. Если на этом уровне соединение не пропадает, то значит баг в библиотеке или программе. Если же соединение рубится на уровне сети, то значит клиент его почему-то закрывает.
Если бы дело было под никсами, то я бы порекомендовал подцепить strace и посмотреть на уровне системных вызовов. Есть ли подобная утилита для виндов, я не знаю.
BB>Здравствуйте, v_andal, Вы писали:
_>>Хотелось бы знать, как происходит отправка и чтение данных в клиенте? Сообщение отправить, сообщение прочесть? Или отправить 100 сообщений, читать ответы по мере поступления?
BB>У клиента есть два потока: в одном сообщения отправляются в цикле, в другом — читаются, тоже в цикле. Согласно документации NetworkStream — это допустимо.
_>>Сервер когда читает, как определяет границы сообщений?
BB>Все сообщения начинаются с фиксированной длины, затем идет переменное тело. Сервер сначала читает длину, затем само тело.
То есть у сервера только один поток? А сервер учитывает, что он может прочесть только кусок сообщения за раз? Потенциально, он и при записи может отправить только часть из отправляемых данных.
В принципе, если сообщения не очень большие, можно весь обмен каким-нибудь wireshark перехватить и посмотреть, что происходит на уровне сети. Если на этом уровне соединение не пропадает, то значит баг в библиотеке или программе. Если же соединение рубится на уровне сети, то значит клиент его почему-то закрывает.
Если бы дело было под никсами, то я бы порекомендовал подцепить strace и посмотреть на уровне системных вызовов. Есть ли подобная утилита для виндов, я не знаю.