2010-04-12 6 views
3

저는 .NET과 C#을 사용하여 프록시를 작성하고 있습니다. 많은 소켓 프로그래밍을 수행하지는 않았지만 최선의 방법은 확실하지 않습니다. 이것을 구현하는 가장 좋은 방법은 무엇입니까? 동기 소켓, 비동기 소켓을 사용해야합니까? 도와주세요!소켓을 사용하는 C# 프록시 어떻게해야합니까?

그것은해야합니다 ...

  • 는 두 개의 서로 다른 포트에서 클라이언트의 연결을 허용하고, 가 동시에 두 포트에서 데이터를 수신 할 수 있습니다.
  • 두 개의 다른 포트에서 서버에 연결하고 동시에 두 포트에서 데이터를 보낼 수 있습니다.

  • 즉시 서버에 연결하고 클라이언트 연결이 완료되면 곧바로 패킷 전달을 시작하십시오.

  • 수신 된 순서대로 전달 패킷.

  • 가능한 한 낮은 대기 시간을 유지하십시오.

  • 내가 프록시에 연결하는 여러 클라이언트의 능력을 필요로하지 않지만, 쉬운 구현하는 경우가 좋은 기능이 될 것입니다.

클라이언트 --------- 프록시 ------- 서버
--- | ---------------- - | ---------------- |
포트 < --------> 포트 < -------> 포트
포트 < --------> 포트 < -------> 포트

+0

Windows Server 2008에서 실행하는 코드를 제한 할 수 있습니다 비동기? –

+0

아니요, 적어도 Windows 7에서 실행해야합니다. – Kin

답변

3

전에 this source code으로 꾸몄습니다. 잘 수행되었으므로 추천되었습니다.

+0

다음은 매우 쉽게 따라 할 수 있습니다. 감사합니다! 그것은 3.5로 컴파일되지 않고 꽤 오래되었습니다. 이 일에 사용되는 구식 (또는 더 나은 방법)을 피해야하는 구체적인 것이 있습니까? – Kin

+1

@kin - 컴파일 문제는 .NET 1.1 (시도하지 않음)으로 컴파일하거나 문제가되는 Math.Floor 내부의 표현식을 double로 변환하여 쉽게 수정할 수 있습니다. – Frederik

+0

주소 컴파일러 문제 : BitConverter를 사용하십시오.ToInt64 (IP.GetAddressBytes(), 0)와 IP.Address. –

1

PortFusion을 확인하십시오! 모두 TCP 기반 트래픽에 대해 적극적으로 사용되고 개발 된 분산 형 역방향 프록시 솔루션입니다. .NET 4.0 용으로 작성되었으며 전체 소스 코드와 함께 제공됩니다.

.NET 3.5에서 도입 된 ReceiveAsync 및 SendAsync 메서드를 테스트했지만 동기식 스레드에서 가능한 높은 처리량에 도달하지 못했습니다. 비동기식 스레드는 많은 수의 동시 클라이언트가있는 경우 더 잘 확장되어야합니다. 제어 번호 고객을위한

최대 처리량 : 동시 연결의 최대 수에 도달 동기 방법 를 사용

관련 문제