我们需要与另一个希望通过原始tcp / ip套接字通信与我们沟通的系统进行交流。什么是适当的.Net对象(如果有的话)用于此?
如果您知道您认为最好使用的第三方组件,开源组件等,请随时提及。
答案 0 :(得分:8)
我会使用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;
然后允许(摘录):
取值treamReader.Read(myReadBuffer, 0, myReadBuffer.Length)
答案 1 :(得分:2)
System.Net.Sockets.Socket
http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx
答案 2 :(得分:2)
我们公司使用Dart Socket.net,它基本上将system.net.sockets.socket包装成非常易于使用的方法/组件以及具有自己的功能。我推荐它们用于Windows窗体应用程序。他们有许多示例与他们的演示一起提供,并有一个积极的支持论坛,您可以发布问题并获得支持/建议。
在Dart.com上查看http://www.dart.com/ptsknet.aspx
答案 3 :(得分:1)
TcpClient是最常见的,虽然我更喜欢Socket类。要么工作。
答案 4 :(得分:1)
插座& TCPClient非常易于管理和高效。他们肯定会做你需要的。使用异步模式的原因有多种。
请注意,存在一些线程问题。例如,一些异步方法将在调用线程退出时终止。还有很多非常低效/糟糕的.NET多线程服务器示例,所以要小心。最后要注意的是异常处理。通常你只是得到一个“SocketException”,并且必须检查它以找出真正发生的事情。如果有一些可以独立处理的派生SocketException类,那将会很棒。
但是,不要让我沮丧,一旦你的代码得到实施和工作,它将继续“正常工作”。