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

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

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


person alchemical    schedule 07.08.2009    source источник


Ответы (5)


Я бы использовал TcpClient. Он находится поверх Socket и является абстракцией Socket. 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;

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

streamReader.Read(myReadBuffer, 0, myReadBuffer.Length)

person user152800    schedule 07.08.2009

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

Ознакомьтесь с ними на Dart.com http://www.dart.com/ptsknet.aspx.

person jw33    schedule 20.08.2009

System.Net.Sockets.Socket

http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx

person Daniel A. White    schedule 07.08.2009
comment
TcpClient всегда следует использовать вместо Socket, так как он включает в себя большую часть функций, связанных с TCP-связью. Самому заново изобретать смысла нет. - person Noldorin; 08.08.2009

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

person Spencer Ruport    schedule 07.08.2009

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

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

Но не позволяйте мне разочаровывать вас, как только вы внедрите свой код и заработаете, он с этого момента будет продолжать «просто работать».

person Eric Nicholson    schedule 08.08.2009