C#通过Web应用程序发送和接收tcp数据包

时间:2011-02-10 22:31:41

标签: c# sockets tcp tcpclient tcpserver

您好 我们正在撰写一个独特的项目。我想知道是否有人能指出我正确的方向,因为我不熟悉tcp编程。

我们与外部系统交谈。我发送一个tcp数据包并接收tcp响应。这需要从Web应用程序中的页面开始工作,不断轮询每个x msecs

建议的消息长度为8个字节,不传输有关消息开始或结束的信息。消息结构: |字节0 |字节1 |字节2 |字节3 |字节4 |字节5 |字节6 |字节7 |

消息分隔符是: |字节0 | = 0x02(stx) 和 |字节7 | = 0x03(etx)

我的发送讯息: | stx | 's'| 'b'| '0'| '0'| '0'|'0'| etx |

我的回忆信息: | stx | 'S'| 'B'| '0'| '1'| '0'| '0'| etx |

问题:

我应该使用tcpCLient / Listener类还是套接字类?

什么是使网页每隔x ms连续轮询和发送/接收这些数据包的最佳方法?

2 个答案:

答案 0 :(得分:0)

您提出的建议基本上无法完成,因为Javascript不支持直接TCP / IP。您必须在服务器上运行TCP进程,并使用异步更新方法在您的网页上显示结果。

要在页面上异步显示结果,您必须使用Ajax和Comet。 Comet基本上为您提供三种选择:

  1. 让您的Javascript使用从计时器回调调用的Ajax请求轮询服务器;这有轮询的所有缺点,
  2. 使用“长轮询”,这实际上意味着对您的网站进行异步调用,直到它有结果为止;这不能很好地扩展,因为它为每个客户端网页锁定了一个IIS线程,
  3. 使用彗星服务器和相关的客户端库,是最好的路线,但通常需要花钱。
  4. 网上有很多关于Comet和Ajax的信息。

答案 1 :(得分:0)

您可能希望查看WebSockets以进行客户端通信,但目前支持非常有限。

另一种选择是使用.swf文件作为TCP通信的中介。见http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html。每当您收到感兴趣的数据包时,您都可以使用ExternalInterface将数据从Flash电影中传出并急切地等待javascript!