Должен ли я использовать StreamReader / Writer с NetworkStream for C # сервер / клиент? - PullRequest
2 голосов
/ 25 марта 2010

Я нахожусь в процессе создания клиент-серверной игры для проекта (чувствуя себя достаточно глубоко). Я использую TCPclient и многопоточный сервер сокетов. На данный момент все работает нормально, но я использую StreamReader и StreamWriter для связи между клиентом и сервером.

Я продолжаю видеть подобные примеры для получения данных:

byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);

и это для отправки:

byte[] data = Encoding.ASCII.GetBytes("This is a test message");
server.SendTo(data, iep);

Мне было интересно, каковы преимущества использования этого по сравнению с streamReader? Будет ли это также использоваться для буферизации?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 25 марта 2010

Это просто другой стиль. ReceiveFrom и SendTo больше в стиле Unix, а использование StreamReader больше в стиле .NET. StreamReader будет более полезным для вас, поскольку вы сможете передать его другим методам, которые принимают TextReader.

0 голосов
/ 09 октября 2017

sendTo() и receiveFrom() используются для сокетов без соединения, которые используют UDP в качестве транспортного протокола. Вы можете использовать Send() или Recieve() при использовании ориентированных на соединение или потоковых сокетов, которые используют TCP в качестве протокола.
StreamReader и StreamWriter - это классы пространства имен ввода-вывода, которые помогут в решении проблемы границы сообщения, которая поставляется с сокетами TCP.
Проблема границы сообщения означает, что все отправленные вызовы не улавливаются во всех входящих вызовах.
Чтобы избежать проблемы границы сообщения, мы используем сетевой поток с streamreader и streamwriter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...