컨텍스트 개체의 속성을 수행할 작업(완료 콜백 메서드, 데이터 버퍼, 버퍼로의 오프셋 및 전송할 최대 데이터 양)으로 설정합니다. Microsoft가 SocketAsyncEventArgs 클래스를 만들기 위해 리소스를 투자한 후, 리소스를 투자하여 이해하기 좋은 예제 코드와 설명을 제공하여 사용하는 방법을 배우는 데 도움이 되는 것은 놀라운 일이 아닙니다. 이 문서는 클래스가 정말 잘 수행되기 때문에, 그 빈 공간을 채우기 위해 설계되었습니다, 당신이 그것을 이해 한 후 매우 도움이. 버퍼 블록의 이론적 최대 크기는 정수 데이터 형식을 사용하기 때문에 2.147GB입니다. 그리고 당신은 아마 정말 32 비트 윈도우에있는 경우, 500 MB 미만을 원할 것입니다. 이 제한은 큰 버퍼 크기를 사용하거나 많은 수의 동시 연결이 있는 경우에만 관련이 있어야 합니다. 예를 들어 50,000바이트의 버퍼 크기를 사용하고 송수신을 위한 별도의 버퍼가 있는 경우 연결당 100,000바이트입니다. 2.147GB를 100,000바이트 = 21,470으로 나눈 값으로, 이 버퍼 크기 및 디자인에서 이 버퍼 블록을 사용할 수 있는 최대 연결 수입니다. 두 프로그램 모두 명령줄 인수를 사용하여 실행합니다. 클라이언트 예제에서는 서버와 클라이언트가 Windows 도메인에서 컴퓨터에서 실행 중인 경우 «localhost»를 컴퓨터 이름 대신 호스트 이름으로 알려야 합니다. 새 System.Net.Sockets.Socket 클래스 향상 에서 비동기 소켓 작업은 응용 프로그램에서 할당하고 유지 관리하는 재사용 가능한 SocketAsyncEventArgs 개체에 의해 설명됩니다. 고성능 소켓 응용 프로그램은 지속되어야 하는 중첩된 소켓 작업의 양을 가장 잘 알고 있습니다. 응용 프로그램은 필요한 SocketAsyncEventArgs 개체를 최대한 많이 만들 수 있습니다.

예를 들어, 서버 응용 프로그램에 들어오는 클라이언트 연결 속도를 지원하기 위해 항상 15개의 소켓 accept 작업을 수행해야 하는 경우 이러한 목적을 위해 15개의 재사용 가능한 SocketAsyncEventArgs 개체를 할당할 수 있습니다. SocketAsyncEventArgs 클래스로 시작하려면 MSDN의 예제를 공부했지만 누락 된 것이 있었습니다. 클래스는 I/O 작업을 수행하는 데 사용되는 소켓에 해당하는 속성 소켓을 노출해야 한다는 것을 이해했습니다. 그러나 수락 작업이 끝날 때까지 클라이언트에서 받은 데이터를 유지하는 방법은 무엇입니까? UserToken은 객체이므로 모든 것을 허용할 수 있으므로 accept 작업을 추적하는 Token 클래스를 만들었습니다. 다음은 토큰 클래스의 인스턴스를 UserToken으로 사용하는 수정된 메서드입니다. 다음 코드 예제에서는 SocketAsyncEventArgs 클래스를 사용하는 소켓 서버에 대한 연결 논리를 구현합니다. 연결을 수락하면 클라이언트에서 읽은 모든 데이터가 클라이언트로 다시 전송됩니다. 클라이언트가 연결해제될 때까지 클라이언트 패턴으로 다시 읽기 및 에코가 계속됩니다. 이 예제에서 사용되는 BufferManager 클래스는 SetBuffer(Byte[], Int32, Int32) 메서드의 코드 예제에 표시됩니다. 이 예제에서 사용되는 SocketAsyncEventArgsPool 클래스는 SocketAsyncEventArgs 생성자의 코드 예제에 표시됩니다.

내가 그랬던 것처럼, 당신은 SocketAsyncEventArgs 클래스에 대한 마이크로 소프트의 메인 페이지에서이 주제에 대한 연구를 시작했을 수 있습니다. 해당 페이지의 예제 코드가 시작되었습니다. 그러나 그것은 또한 혼란스러웠습니다. 내가 그들의 예제 코드와 함께 발견 한 문제 중 일부는 다음과 같은 : 안녕 좋은 작품 …:)1. 당신은 프로세스 전송 함수에 대한 예를 제공 할 수 있습니다 ?2. 이러한 종류의 구현에서 네트워크 연결 문제를 어떻게 처리할 수 있습니까? 또한 수신기에서 받은 메시지를 조작할 수 있는 위치를 표시하도록 코드를 수정했습니다. 이 예제에서는 토큰 클래스에서 ProcessData 메서드를 만들어 수신된 메시지를 클라이언트에 다시 에코합니다. 새 비동기 소켓 작업 컨텍스트 개체의 수명은 응용 프로그램 코드 및 비동기 I/O 참조에 의해 확인 됩니다.

응용 프로그램이 비동기 소켓 작업 메서드 중 하나에 매개 변수로 제출된 후 비동기 소켓 작업 컨텍스트 개체에 대한 참조를 유지할 필요는 없습니다.