使用哪个.Net组件进行tcp/ip套接字通信?

3
我们需要与另一个系统进行原始的tcp/ip套接字通信。如果有合适的.NET对象,您可以使用它来实现吗?
如果您知道更好的第三方组件、开源组件等,也请随时提出建议。
5个回答

8
我会使用TcpClient。它是在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)


3
我们公司使用Dart Socket.net,基本上将system.net.sockets.socket包装成易于使用的方法/组件,并具有自己的功能。我建议将其用于Windows表单应用程序。他们有很多随示例提供的示例,并有一个活跃的支持论坛,您可以在其中发布问题并获得支持/建议。
请查看Dart.comhttp://www.dart.com/ptsknet.aspx

2

6
应优先使用 TcpClient 而非 Socket,因为它封装了与 TCP 通信相关的大部分功能,自己重新实现没有必要。 - Noldorin

1
TcpClient是最常见的,虽然我自己更喜欢Socket类。两者都可以工作。

1

Socket和TCPClient都很容易管理和高效。它们肯定能够满足您的需求。使用任何一种异步模式都有很多好处。

请注意,存在一些线程问题。例如,某些异步方法将在调用线程退出时终止。还有很多非常低效/糟糕的.NET多线程服务器示例,因此请小心。最后要注意的是异常处理。通常只会返回一个“SocketException”,您需要检查它以了解实际发生了什么。如果有更多派生的SocketException类可以独立处理,那就太好了。

但不要让我打击你的积极性,一旦您实现并使代码正常工作,它将继续“正常工作”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接