1) Оба. Вы должны иметь возможность прослушивать все устройства, но вы часто не можете с вашим кодом, потому что поток слушателя связан с ожиданием потока от устройства, которое подключалось ранее.
2) Вероятно, нет. IIRC, NetworkStream.Read возвращает 0, когда соединение закрыто одноранговым устройством. Это твой протокол - т.е. устройство подключается, отправляет некоторые данные и отключается? Если так, то это будет работать, хотя и медленно. Во всяком случае, есть другая проблема. Вы должны объединять байты, полученные в вашем потоке, с данными, а не просто заменять их - Read (), я возвращаюсь несколько раз за одно сообщение, возможно, даже с одним байтом каждый раз (маловероятно, но разрешено для потоков TCP). Вы можете сохранить количество байтов RX. до сих пор и использовать параметр «смещение», чтобы сделать это.
3) Вам нужен только один поток прослушивания, т.е. тот, который вызывает AcceptTcpClient (). Этот поток не должен выполнять блокирующие вызовы для получения данных из сокета, возвращаемого AcceptTcpClient (). Либо создайте / выделите / удалите / какой-либо новый поток клиент-сервер для запуска цикла Read () для каждого сокета 'client', возвращаемого AcceptTcpClient (), или используйте асинхронный ввод-вывод.
4) Ваш единственный поток прослушивания / чтения не будет отвечать на новые подключения, пока он ожидает NetworkStream - другие устройства не смогут подключиться. Слушатель должен быстро вернуться к AcceptTcpClient () и не ждать медленных сетей / устройств для отправки данных.
Rgds,
Martin