문제

C#/. Net 3.5에서 네트워킹을 수행하는 방법을 배우기위한 올바른 방향으로 나를 지적 할 수 있습니까? 코드 샘플 및 설명을 환영합니다. 기본적으로 비동기/멀티 스레드 서버/클라이언트 모델을 수행하는 방법을 찾고 있습니다.

나는 Winsock과 함께 C ++에서 이것을 달성하는 방법의 기본 사항에 대해 상당히 편안하지만 모든 연구는 C#에서이 개념을 파악할 수는 없지만 모든 연구는이 개념을 파악할 수는 없습니다.

제공 할 수있는 도움에 감사드립니다 :)

도움이 되었습니까?

해결책

WCF가 귀하의 요구를 충족 시키면 살펴볼 가치가 있습니다. 제로 다른 대안 상위 레벨 라이브러리가 존재합니다. 그렇지 않으면 필요한 경우 소켓 레벨에 가까이 다가 갈 수있는 여러 가지 방법이 있습니다.

tcpclient/udpclient

이들은 기본 소켓 주위에 비교적 얇은 래퍼를 제공합니다. 본질적으로 소켓 위의 스트림을 제공합니다. NetworkStream (Beginread 등)에서 비동기 메소드를 사용할 수 있습니다. 래퍼가 그렇게 많이 제공하지 않기 때문에 나는 이것을 좋아하지 않으며 소켓을 직접 사용하는 것보다 조금 더 어색한 경향이 있습니다.

소켓 - 선택

이것은 다중 소켓 IO를 단일 스레드로 다중화하기위한 클래식 선택 기술을 제공합니다. 더 이상 권장하지 않습니다.

소켓 -APM 스타일

소켓의 비동기 프로그래밍 모델 (일명 Iasyncresult, 시작/끝 스타일)은 소켓을 비동기로 사용하는 주요 기술입니다. 그리고 몇 가지 변형이 있습니다. 기본적으로 비동기 방법 (예 : 시작)을 호출하고 다음 중 하나를 수행합니다.

  1. 반환 된 IASYNCRESULT (거의 사용되지 않음)에 대한 완료를위한 여론 조사.
  2. Iasyncresult의 Waithandle을 사용하여 방법이 완료 될 때까지 기다립니다.
  3. 시작 방법이 완료되면 실행될 콜백 메소드를 전달하십시오.

가장 좋은 방법은 일반적으로 가장 편리하기 때문에 #3입니다. 의심스러운 경우이 방법을 사용하십시오.

일부 링크 :

.NET 3.5 고성능 소켓

.NET 3.5는 이벤트를 사용하는 비동기 소켓 용 새로운 모델을 소개했습니다. "단순화 된"비동기 모델 (예 : Socket.sendasync)을 사용합니다. 콜백을 제공하는 대신 완료를 위해 이벤트를 구독하고 iasyncresult 대신 SocketAsynceventArgs를 얻습니다. 아이디어는 SocketasynceventArgs를 재사용하고 소켓 IO에 대한 메모리를 사전 할당 할 수 있다는 것입니다. 고성능 시나리오에서는 APM 스타일을 사용하는 것보다 훨씬 효율적일 수 있습니다. 또한 메모리를 사전 할당하면 안정적인 메모리 발자국, 쓰레기 수집 감소, 고정 등의 메모리 구멍이 발생합니다. 이에 대한 걱정은 가장 고성능 시나리오에서만 고려해야합니다.

요약

대부분의 경우 SocketAsynceventArgs / Async 메소드의 스타일을 선호하지 않는 한 APM 스타일의 콜백 메소드를 사용하십시오. Winsock에서 완료 포트를 사용한 경우이 두 가지 방법이 모두 완료 포트를 사용한다는 것을 알아야합니다.

다른 팁

.NET 3.5 세계에서는 확실히 배워야합니다 Windows Communication Foundation -.net 네트워킹을위한 .NET 프레임 워크.

유용한 링크 :

동기 및 비동기 작업 (WCF)

StackoverFlow 브라우징 게시물에서 유용한 WCF 정보를 찾을 수 있습니다. WCF 태그 꼬리표

그것은 당신이 집중하고 싶은 것에 달려 있습니다.

기능에 집중하고 배관을 프레임 워크에 맡기려면 Windows Communication Foundation부터 시작하십시오.

자신의 배관을 구축하려는 경우 사용하십시오. System.Net.Sockets.Socket 수업.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top