C# Proxy using Sockets, how should I do this?

折月煮酒 提交于 2021-02-07 04:14:46

问题


I'm writing a proxy using .NET and C#. I haven't done much Socket programming, and I am not sure the best way to go about it. What would be the best way to implement this? Should I use Synchronous Sockets, Asynchronous sockets? Please help!

It must...

  • Accept Connections from the client on two different ports, and be able to receive data on both ports at the same time.
  • Connect to the server on two different ports, and be able to send data on both ports as the same time.

  • Immediately connect to the server and start forwarding packets as soon as a client connection is made.

  • Forward packets in the same order they were received.

  • Be as low latency as possible.

  • I don't need the ability for multiple clients to connect to the proxy, but it would be a nice feature if its easy to implement.

Client --------- Proxy ------- Server
---|-----------------|----------------|
Port <--------> Port <-------> Port
Port <--------> Port <-------> Port


回答1:


I've tinkered with this source code before. It was done well, recommended.




回答2:


Please check out PortFusion! It is a complete, actively-used and -developed distributed reverse proxy solution for all TCP-based traffic. It is written for .NET 4.0 and comes with full source code.

I have tested ReceiveAsync and SendAsync methods introduced in .NET 3.5 but have not found them to reach as high a throughput as is possible with synchronous ones - Async ones should scale better in case of a great number of concurrent clients though.

Maximum throughput for a controlled number clients: use synchronous methods Reaching maximum number of concurrent connections: async



来源:https://stackoverflow.com/questions/2620853/c-sharp-proxy-using-sockets-how-should-i-do-this

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!