使用套接字的C#代理,我应该怎么做?

问题描述:

我正在使用.NET和C#编写代理。 我还没有做过太多的Socket编程,我不确定最好的方法来解决它。 执行此操作的最佳方法是什么? 我应该使用同步套接字,异步套接字吗?请帮忙!使用套接字的C#代理,我应该怎么做?

它必须...

  • 接受 两个不同的端口从客户端的连接,并能够 收到的 同时两个端口的数据。
  • 在两个不同的端口上连接到服务器,并且能够同时在两个端口上发送数据。

  • 立即连接到服务器,并在客户端连接立即开始转发数据包。

  • 按照收到的顺序转发数据包。

  • 尽可能延迟。

  • 我不需要多 客户端连接到代理服务器的能力,但它 将是一个不错的功能,如果它很容易 实现。

客户--------- -------代理服务器
--- | ---------------- - | ---------------- |
端口< -------->端口< ------->端口
端口< -------->端口< ------->端口

+0

你可以限制你的代码到Windows Server 2008上运行? – 2010-04-12 09:31:53

+0

不,它必须至少在Windows 7上运行。 – Kin 2010-04-12 10:20:29

我以前用this source code做过修饰。它做得很好,推荐。

+0

这很容易遵循,谢谢!它不是用3.5编译的,而且已经很老了。有什么具体的我应该避免做的(过时的,或更好的方式),在这里使用? – Kin 2010-04-12 15:48:53

+1

@kin - 编译问题很容易通过编译为.NET 1.1(未尝试)或通过在有问题的Math.Floor中将表达式转换为double来修复。 – Frederik 2014-08-07 21:12:06

+0

地址编译器问题:使用BitConverter。ToInt64(IP.GetAddressBytes(),0)与IP.Address。 – 2015-09-15 23:53:45

请检查出PortFusion!它是一个完整的,积极使用和开发的分布式反向代理解决方案,用于全部基于TCP的流量。它是为.NET 4.0编写的,并附带完整的源代码。

我测试了.NET 3.5中引入的ReceiveAsync和SendAsync方法,但未发现它们的吞吐量与同步吞吐量一样高 - 异步应用在大量并发客户端时应该扩展得更好。

为控制客户数量最大吞吐量:使用同步方法 到达最大并发连接数:异步