serhioli
@serhioli

Как получить данные через TCP C#?

Есть устройство. Оно подключается через TCP и шлет массив байт, сообщая о своем состоянии. Ей надо отвечать типа ACK/NAK. Раз в 20 секунд пингует ПК специальной последовательностью байт. Соединение после приема рвать запрещено условиями протокола. Ну и конечно, все должно быть асинхронно.
Суть проблемы:
1) Все примеры в интернете, которые я находил не получают данных(есть буфер, все ок, делаем BeginRecieve, пишем в буфер, а в нем нули). ЧЯДНТ??
2) Как это сделать лучше всего с учетом того что к одному ПК впоследствии будут подключены несколько сотен устройств?
Подскажите примеры похожих реализаций, или ткните в мануал (:
Спасибо за внимание.

UPD:
Вопрос закрыт. Почему я лох? Потому что сначала проверить, что socket.CanRead && socket.DataAvilable, а потом читать до тех пор, пока счетчик прочтенных байт не станет равен(или меньше) нулю. Profit (:
  • Вопрос задан
  • 747 просмотров
Решения вопроса 1
@tex0
есть буфер, все ок, делаем BeginRecieve, пишем в буфер, а в нем нули

Во первых - убедитесь что устройство всё же подключается к вашему серверу.
Во вторых почитайте про асинхронные шаблоны программирования Asynchronous Programming Patterns

Как это сделать лучше всего с учетом того что к одному ПК впоследствии будут подключены несколько сотен устройств?

Ссылка на "Во вторых" =)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
serhioli
@serhioli Автор вопроса
За ссылку спасибо. Но даже в синхронном режиме у меня траблы:
_tcpServer = new TcpListener(IPAddress.Any, TCP.Default.port);
                _tcpServer.Start();

                byte[] bytes = new byte[255];
                TcpClient client = _tcpServer.AcceptTcpClient();
                NetworkStream stream = client.GetStream();
                int i;
                i = stream.Read(bytes, 0, bytes.Length);
                    
                MessageBox.Show(BitConverter.ToString(bytes));

Вывело массив из 255 элементов 00-00-00-00-00-и т. д.
Запустил другую программу - умельцы на си делали. У них все схватывает.
Стоит отметить: порт свободен, устройство достукивается, данные точно есть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы