c# tcpclient 비동기 예제

작업 예제가 있는 http://csharp.net-informations.com/communications/csharp-socket-programming.htm c# 소켓 프로그래밍. 인수 TcpClientWrapper 클라이언트래퍼 processMethod 통신 피어의 프록시 역할을 하 고 명시적으로 비동기 데이터를 보내는 데 사용할 수 있습니다. 샘플에서 이를 설명하기 위해 타이머의 처리기에서 스트리밍 시나리오를 구현하는 데 사용합니다. 다시 2005 나는 블로그 포스트 TcpListener 및 TcpClient (사용하기 쉬운 예)를 썼다. 그것은 정말 내가 하고 있던 것을 빨리 끝내기 위해 쓴 코드의 한 조각이었고, 나는 내 블로그에 넣었다. 코드는 버려진 코드였지만 몇 년이 지난 후에도 여전히 내 블로그에 많이 방문했습니다. RPC 사례 프로세스의 경우Method는 stateProperties에서 RemoteProcInfo 개체를 추출하고 실제 프로시저 호출을 수행합니다. 다른 시나리오에서 processMethod는 list lst 인수를 사용합니다. 결과적으로 processMethod는 형식 ProcessingResult의 개체를 생성합니다.

이 출력 개체(속성 BytesToSendBack 또는 StringToSendBack)의 내용은 처리결과 형식의 IsSyncSend 부울 속성값에 따라 동기또는 비동기적으로 연결 피어로 자동으로 다시 전송됩니다. processMethod의 반환 값이 null이면 processMethod 호출 후 통신 피어로 아무 것도 다시 전송되지 않습니다. 예를 들어 데이터 수신 승인이 필요하지 않은 경우 데이터 수신자 측에서 스트리밍할 때 사용됩니다. 연결당 호출되며 while 루프에서 수신된 데이터를 읽습니다. 비동기 await 패턴으로 인해 루프는 스레드를 차단하지 않으므로 비동기 소켓을 구현합니다. 또한 수신된 모든 바이트를 들어오는 동안 유지하는 비동기 바이트 버퍼도 포함됩니다. 응용 프로그램은 수신된 다른 바이트를 삭제하지 않고 필요한 만큼 의 바이트를 줄일 수 있습니다. 큐에서 대기열은 동기적으로 호출될 때 사용 가능한 만큼 의 바이트를 반환하거나 비동기적으로 호출될 때 요청된 바이트 수만큼 반환됩니다. 비동기 메서드를 취소할 수 있습니다. 이렇게 하면 코드가 복구할 수 없게 차단되지 않습니다.

이 리포지토리의 응용 프로그램에는 두 구현 스타일의 전체 예제가 제공됩니다. Program.cs 읽기 시작하십시오. 첫 번째 테스트 사례로 하나의 서버와 하나의 클라이언트 응용 프로그램을 실행합니다. 클라이언트가 즉시 사용할 수 없는 경우 서버를 계속 연결하려고 시도하기 때문에 순서에 따라 실행될 수 있습니다(적절한 매개 변수가 구성될 수 있음). INCLUDE_RPC가 정의된 경우 클라이언트에서 스트리밍 및 RPC 시나리오에 대한 메시지를 볼 수 있습니다(스트리밍전용). RPC 사례의 경우 서버는 프로세스Method 콜백이 실행되는 스레드를 나타내는 TcpHelperLib 구성 요소의 콘솔 메시지를 씁니다. 보시다시피 스레드는 수시로 다씩 다씩 변경됩니다. 이는 비동기-await 패턴으로 구현된 비동기 메시지 수신 메커니즘을 나타냅니다. 클라이언트 및 서버 응용 프로그램은 콘솔 창에서 키를 클릭한 후 모두 중지될 수 있습니다. 이러한 중 하나를 중지하고 다른 예외 메시지에서 적절한 예외 메시지를 표시한 다음 중지된 응용 프로그램을 다시 시작할 수 있습니다. 연결이 복원되고 클라이언트와 서버 모두 처음에 실행됩니다 (리눅스에서 가상 머신에서 성공적인 다시 시작은 몇 시간 후에 가능하다는 점에 유의하십시오 – 아마 이전 소켓은 즉시 파괴되지 않습니다).

여러 클라이언트로 서버를 시작할 수 있습니다. 각 클라이언트는 RPC 및 스트리밍을 위한 서버와의 자체 연결을 설정합니다. 이전 사례와 마찬가지로 응용 프로그램을 다시 시작하면 자동으로 다시 연결됩니다. 클라이언트는 TcpHelper 형식의 개체로 만들어집니다. 개체 clientStream 스트리밍 시나리오를 제공 하 고 개체 clientRpc RPC 시나리오에 대 한 스탠드 (후자의 INCLUDE_RPC 정의 될 때 사용). 각 클라이언트는 서버에 대한 하나의 연결을 지원하며 processMethod 콜백의 자체 구현을 수행합니다. 클라이언트는 해당 메서드 Connect()를 호출하는 연결을 시작합니다. Connect() 호출 서버와의 연결 개시에 대한 응답으로 적절한 클라이언트의 processMethod로 처리된 잘 알려진 승인으로 응답했습니다.

This entry was posted in Non classé. Bookmark the permalink.

Comments are closed.