Какой компонент .Net следует использовать для связи через сокеты tcp / ip? - PullRequest
3 голосов
/ 08 августа 2009

Нам нужно поговорить с другой системой, которая хочет общаться с нами через необработанную связь через сокет tcp / ip. Что будет подходящим объектом .Net, если таковой будет использоваться для этого?

Если вам известен сторонний компонент, компонент с открытым исходным кодом и т. Д., Который, по вашему мнению, лучше использовать, пожалуйста, не стесняйтесь упомянуть об этом.

Ответы [ 5 ]

8 голосов
/ 08 августа 2009

Я бы использовал TcpClient. Он находится на вершине Сокета и является абстракцией на Сокете. TcpClient имеет GetStream, который возвращает объект Stream. Затем, чтобы прочитать поток, вы можете просто использовать средство чтения потоков.

Например:

tcpClient = new TcpClient(host, port)
                            {
                                ReceiveTimeout = readTimeout
                            };
            stream = tcpClient.GetStream();
            streamReader = new StreamReader(stream, Encoding.ASCII);
            streamWriter = new StreamWriter(stream, Encoding.ASCII)
                               {
                                   AutoFlush = true
                               };

            return this;

Что позволяет (фрагмент):

S treamReader.Read(myReadBuffer, 0, myReadBuffer.Length)

2 голосов
/ 21 августа 2009

Наша компания использует Dart Socket.net, который в основном превращает system.net.sockets.socket в действительно простые в использовании методы / компоненты, а также имеет собственные функции. Я рекомендую их для приложений Windows Form. У них есть много примеров, которые идут с их демонстрациями и имеют активный форум поддержки, на котором вы можете оставлять вопросы и получать поддержку / предложения.

Проверьте их на Dart.com http://www.dart.com/ptsknet.aspx

2 голосов
/ 08 августа 2009
1 голос
/ 08 августа 2009

Socket и TCPClient довольно просты в управлении и эффективны. Они обязательно сделают то, что вам нужно. Есть множество веских причин использовать асинхронные режимы любого из них.

Имейте в виду, что существуют некоторые проблемы с многопоточностью. Например, некоторые из асинхронных методов завершатся при выходе из вызывающего потока. Существует множество очень неэффективных / плохих примеров многопоточных серверов .NET, поэтому будьте осторожны. И последнее, на что нужно обратить внимание - это обработка исключений. Часто вы просто возвращаете «SocketException» и должны проверить его, чтобы выяснить, что на самом деле произошло. Было бы здорово, если бы было еще несколько производных классов SocketException, которые могли бы обрабатываться независимо.

Но не позвольте мне вас обескуражить, когда ваш код будет реализован и работает, он будет продолжать "просто работать" с тех пор.

1 голос
/ 08 августа 2009

TcpClient является наиболее распространенным, хотя я предпочитаю класс Socket сам. Либо будет работать.

...