2009-08-07 46 views
3

我们需要与另一个想通过原始tcp/ip套接字通信与我们沟通的系统通话。什么是适当的.Net对象,如果有的话,用于这个?哪个.Net组件应该用于tcp/ip套接字通信?

如果您知道第三方组件,开源组件等,您认为使用起来更好,请随时提及。

回答

1

的TcpClient的是最常见的,但我更喜欢Socket类自己。要么会工作。

8

我会使用TcpClient。它位于Socket之上,是Socket上的一个抽象。 TcpClient具有返回Stream对象的GetStream。然后要读取流,您可以简单地使用流读取器。

例如:

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; 

,然后允许(片段):

小号treamReader.Read(myReadBuffer, 0, myReadBuffer.Length)

1

插槽&的TcpClient都非常易于管理和高效。他们一定会做你需要的。有两种使用异步模式的很好的理由。

被警告有一些线程问题。例如,一些异步方法将在调用线程退出时终止。有很多非常低效/糟糕的.NET多线程服务器例子,所以要小心。最后要注意的是异常处理。通常你只是得到一个“SocketException”,并且必须检查它来确定发生了什么。如果有几个派生的可以独立处理的SocketException类,那将是非常好的。

但是,不要让我气馁,一旦你的代码得到实现并运行起来,它将继续“继续工作”。

2

我们公司使用Dart Socket.net,它基本上将system.net.sockets.socket包装成非常易于使用的方法/组件以及具有自己的功能。我推荐他们用于Windows窗体应用程序。他们在演示中附带了很多示例,并且有一个积极的支持论坛,您可以发布问题并从中获得支持/建议。

检查出来,在Dart.com http://www.dart.com/ptsknet.aspx