C# Proxy using Sockets, how should I do this?
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 Synchrono开发者_开发知识库us 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
I've tinkered with this source code before. It was done well, recommended.
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
精彩评论