powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему клиент сокет не принимает данные от сервера?
17 сообщений из 17, страница 1 из 1
Почему клиент сокет не принимает данные от сервера?
    #39105568
VaneS Ri_lax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, пишу сокет клиент на c#.
Принцип работы простой, клиент посылает строку запроса, сервер что то отвечает строкой ответа.
Вот собственно сам клиент:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
private static void sendDataOEM()
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress ipAddress = null; //IP-адресс
            IPEndPoint Addr = null; //конечная точка(IP и порт)

            ipAddress = Dns.GetHostEntry("web.domen.ru").AddressList[0];
            Addr = new IPEndPoint(ipAddress, 3319);
            s.Connect(Addr);

            byte[] msg = Encoding.UTF8.GetBytes("This is a test");
            int i = s.Send(msg); //Отправляем
            Console.WriteLine("Sent {0} bytes.", i);

            byte[] bytes = new byte[256];
            i = s.Receive(bytes);


            Console.WriteLine(Encoding.UTF8.GetString(bytes));
            s.Close();
        }


Отправляются данные нормально, но вот ответ с сервера не приходит. В чем может быть проблема?
Заранее большое спасибо!
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39105929
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто не успевает получить? Поставьте Sleep(1000) перед получением данных и проверьте
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39106325
Артем_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с таким же поведением, разрешилось только со Sleep'ом

При этом, если использовался TcpClient, таких проблем не было.
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39106507
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Поставьте Sleep(1000) перед получением данных
бред сивой кобылы
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39106510
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилArm79Поставьте Sleep(1000) перед получением данных
бред сивой кобылы

Почему бред? Написано же, проверить . Мало ли по каким причинам сервер не отвечает )))
Теперь убедились, что сервер работает нормально, просто клиент не знает, что ответ сервера нужно ждать. Нужно смотреть протокол прикладного уровня.
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39106603
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Почему бред? Написано же, проверить
для этого Socket.Select применяется(с таймером или без оного в зависимости от задачи) .
бредом является использование Sleep
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39106620
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилArm79Почему бред? Написано же, проверить
для этого Socket.Select применяется(с таймером или без оного в зависимости от задачи) .
бредом является использование Sleep

Для проверки и слип подойдет. Гораздо быстрее, чем селект с этой точки зрения
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39106654
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Изопропилпропущено...

для этого Socket.Select применяется(с таймером или без оного в зависимости от задачи) .
бредом является использование Sleep

Для проверки и слип подойдет. Гораздо быстрее, чем селект с этой точки зренияНе подойдёт. Подойдёт Read + соответствующий ReadTimeout.
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39106814
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Для проверки и слип подойдет. Гораздо быстрее, чем селект с этой точки зрения
в каком смысле быстрее?
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39106860
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилArm79Для проверки и слип подойдет. Гораздо быстрее, чем селект с этой точки зрения
в каком смысле быстрее?
В смысле написать и тут же протестить
Чем потратить минут 10-20 чтобы прочитать хелп, применить селект и еще думать, ошибся или нет.

Человек же явно не спец в разработке таких вещей, ему бы попроще что нить
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39107102
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Человек же явно не спец в разработке таких вещейпущай учится
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39107175
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Лучше день потерять, потом за час долететь" (с)
Sleep() надо вообще запретить. Ни разу не сталкивался чтобы он был реально нужен. Разве что при отладке.
Зато из-за него было много случаев переписываний кода из состояния "лишь бы работало", в состояние "чтобы работало быстро".
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39107194
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T"Лучше день потерять, потом за час долететь" (с)
Sleep() надо вообще запретить. Ни разу не сталкивался чтобы он был реально нужен. Разве что при отладке.
Зато из-за него было много случаев переписываний кода из состояния "лишь бы работало", в состояние "чтобы работало быстро".
Ну зачем так опрометчиво то? Он например находит свое применение в реализации SpinWait или SpinLock.
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39107242
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TРазве что при отладке.
Arm79Поставьте Sleep(1000) перед получением данных и проверьте


Dima TНи разу не сталкивался чтобы он был реально нужен
Ранее, до TPL, использовал Sleep(0) или Sleep(1) для переключения потоков или неблокирующего ожидания
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39107335
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C# только осваиваю, с многопоточностью и асинхронными операциями пока не разбирался, написал по своему опыту работы на Си с WinAPI. Там все асинхронные операции имеют возможность блокирующего ожидания завершения. При необходимости можно задать максимальное время ожидания. Используются WaitForSingleObject() или WaitForMultipleObject() но никак не Sleep()
Если асинхронность не нужна - имеются синхронные аналоги. В данном случае надо именно такой аналог искать.
Думаю в C# должна быть аналогичная ситуация. Оно поверх того же WinAPI работает.

В данном случае вообще непонятно в чем проблема, судя по хэлпу Socket.Receive() блокирующая операция
https://msdn.microsoft.com/ru-ru/library/ms145154(v=vs.110).aspx Если отсутствуют данные, доступные для чтения, метод Receive будет выполнять блокирование до тех пор, пока не станут доступны данные, если не было установлено значение тайм-аута путем использования объекта Socket.ReceiveTimeout.Если значение тайм-аута было превышено, объект Receive выдаст исключение SocketException.Если используется неблокирующий режим и отсутствуют данные в стековом буфере протокола, метод Receive немедленно завершится и создаст исключение SocketException.Чтобы определить наличие данных, доступных для чтения, можно использовать свойство Available.Когда значение свойства Available не равно нулю, повторите операцию приема.
Скорее всего сервер просто закрывает соединение ничего не отвечая.
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39107343
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ данном случае вообще непонятно в чем проблема.Было же выше посоветовано - увеличить ReadTimeout, извращенцы вместо этого могут использовать Sleep.
...
Рейтинг: 0 / 0
Почему клиент сокет не принимает данные от сервера?
    #39109823
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВDima T"Лучше день потерять, потом за час долететь" (с)
Sleep() надо вообще запретить. Ни разу не сталкивался чтобы он был реально нужен. Разве что при отладке.
Зато из-за него было много случаев переписываний кода из состояния "лишь бы работало", в состояние "чтобы работало быстро".
Ну зачем так опрометчиво то? Он например находит свое применение в реализации SpinWait или SpinLock.
Дочитал до этого места у Рихтера, могу прокомментировать. Sleep() тут используется не по прямому назначению:
Sleep(0) - отдать оставшийся квант времени другому потоку с таким же приоритетом
Sleep(1) - разрешить выполниться потоку с более низким приоритетом

Просто нет функций WinAPI которые это сделают, поэтому используют Sleep(). Но это не говорит о том что Sleep() полезен всюду. Пусть он будет во внутренностях каких-то объектов (которые понимают эти тонкости), но в своем коде его не надо вызывать никогда.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему клиент сокет не принимает данные от сервера?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]