我们需要与另一个想通过原始tcp/ip套接字通信与我们沟通的系统通话。什么是适当的.Net对象,如果有的话,用于这个?哪个.Net组件应该用于tcp/ip套接字通信?
如果您知道第三方组件,开源组件等,您认为使用起来更好,请随时提及。
我们需要与另一个想通过原始tcp/ip套接字通信与我们沟通的系统通话。什么是适当的.Net对象,如果有的话,用于这个?哪个.Net组件应该用于tcp/ip套接字通信?
如果您知道第三方组件,开源组件等,您认为使用起来更好,请随时提及。
System.Net.Sockets.Socket
http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx
的TcpClient的是最常见的,但我更喜欢Socket类自己。要么会工作。
我会使用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)
插槽&的TcpClient都非常易于管理和高效。他们一定会做你需要的。有两种使用异步模式的很好的理由。
被警告有一些线程问题。例如,一些异步方法将在调用线程退出时终止。有很多非常低效/糟糕的.NET多线程服务器例子,所以要小心。最后要注意的是异常处理。通常你只是得到一个“SocketException”,并且必须检查它来确定发生了什么。如果有几个派生的可以独立处理的SocketException类,那将是非常好的。
但是,不要让我气馁,一旦你的代码得到实现并运行起来,它将继续“继续工作”。
我们公司使用Dart Socket.net,它基本上将system.net.sockets.socket包装成非常易于使用的方法/组件以及具有自己的功能。我推荐他们用于Windows窗体应用程序。他们在演示中附带了很多示例,并且有一个积极的支持论坛,您可以发布问题并从中获得支持/建议。
检查出来,在Dart.com http://www.dart.com/ptsknet.aspx
'TcpClient'应始终赞成Socket'的'被使用,因为它包裹多的有关TCP通信的功能。你自己重新发明真的没有意义。 – Noldorin 2009-08-07 23:26:40