2016-08-10 4 views
1

Я полностью смущен и ошеломлен своей проблемой. Я написал многосерверный сервер, используя сокеты.C# Socket send receive network

Я создал первый GUI, который принимает клиентов и отображает их в gridview, в событии gridview click открывает новый графический интерфейс с сокетом между кликом клиентом и сервером. Так что все о связи между сервером и клиентами идет хорошо и быстро

Но мои проблемы:

  1. информация посыла между ними, как отправкой полного процесса иногда показано полным и иногда меньше результата.

  2. отправьте управление файлами, например, когда сервер запрашивает полные папки/файлы в каталоге, иногда он показывает их все, а иногда и меньше результата.

Но команда, открывающая окно, открывает URL-адрес, посылает сообщение, команды, подобные этим работам, прекрасно и мгновенно.

Я прямо сейчас, что проблема

  • Примечание 1 Я так растерялся: я использовал Экстерн IP для связи между сервером/клиентом.
  • Примечание 2: подключение к Интернету является совершенным (определенно не медленно)

Я пытался использовать различные размеры буфера, но то, что я действительно путают о том, что иногда результат приходит полный с определенным размером буфера и иногда не с тем же размером буфера.

Благодарим вас за внимание!

+0

Какой протокол вы использовали? См. Использование протокола HTTP ** Content-Length ** для определения размера пакета. Вы должны перенести информацию о размере пакета и сначала прочитать заголовок пакета (с ограничением размера), а также другой путь пакета. –

+0

первое спасибо за ваш ответ, поэтому я использую tcp с типом сокета и сетевой сетью, и я полностью понял ваш комментарий. –

+0

Сначала вы должны перенести длину пакета. См., Например, http-спецификацию. –

ответ

1

Я бы также рекомендовал использовать wirehark, чтобы вы могли получить полную информацию и транзакции, которые действительно происходят в сети.

Это поможет вам исключить, откуда исходит проблема.

Чтобы определить размер пакета увидеть изображение enter image description here

Здесь я не говорю о том, как работает протокол TCP рукопожатия, как я предполагаю, что это работает. Однако обратите внимание, что при передаче, если вы видите что-то вроде RST, возможно, кто-то выпустил команду сброса, подразумевая, что в передаче произошла некоторая ошибка. Например, что-то из-за контрольной суммы, например. Хотя это обычно проблема для тех, кто работает напрямую по протоколу TCP/IP

Это поможет вам подтвердить, что вы отправили и получили правильную длину.

+0

Привет! , можете ли вы немного описать, как он может определить размер пакета? –

+0

привет, я обновил свой ответ. Пожалуйста, спросите меня, если у вас есть какие-либо вопросы, с которыми я могу помочь. дайте мне взлет, если вам нравится мой ответ! – CJC

+0

Привет, спасибо! –