동기 클라이언트 소켓 예제

소켓 프로그래밍은 네트워크에서 두 노드를 연결하여 서로 통신하는 방법입니다. 기본적으로 클라이언트가 연결하고 서버에 메시지를 보내고 서버가 소켓 연결을 사용하여 표시하는 단방향 클라이언트 및 서버 설정입니다. 한 소켓(노드)은 IP에서 특정 포트에서 수신을 수신하는 반면 다른 소켓은 다른 소켓에 연결하여 연결됩니다. 클라이언트가 서버에 도달하는 동안 서버는 수신기 소켓을 형성합니다. 서버 및 클라이언트 코드를 자세히 보기 전에 TCP/IP 모델을 자세히 살펴보고하는 것이 좋습니다. 수신 대기 상태에 소켓을 배치하고 연결할 수 있는 클라이언트 소켓 수를 지정합니다: Send 메서드는 버퍼에서 연결된 소켓으로 데이터를 보냅니다. Send 메서드를 호출하면 “전송된” 바이트 수를 반환합니다. 그러나 바이트가 이미 다른 쪽에서 수신되었다는 의미는 아니라 데이터가 소켓 버퍼에 저장되고 소켓이 이를 보내려고 한다는 의미입니다. 소켓 버퍼가 가득 차면 DBlock 오류가 발생합니다. 데이터를 다시 보내려면 잠시 기다려야 합니다. 이제 우리는 IpEndPoint와 우리의 소켓을 연결합니다 : 나는 여기에 사용할 샘플이며 프로젝트에 통합하기 쉬운 응용 프로그램을 제공했습니다. 따라서 소켓의 기능을 활용하여 보다 풍부하고 강력한 소프트웨어를 빌드할 수 있습니다.

이제 서버가 연결된 소켓에 비동기적으로 데이터를 전송합니다: 소켓은 네트워크를 사용하여 데이터를 전송하므로 프로토콜을 사용합니다. 이 컨텍스트에서 가장 잘 알려진 것은 빠르지만 신뢰할 수 없는 UDP와 신뢰할 수 있지만 빠르지는 않은 TCP입니다. 메시지를 보낼 때 안정성을 권장합니다. 이것이 바로 TCP를 사용하는 이유입니다. 생성된 소켓이 IpEndPoint 및 프로토콜 유형을 설정할 수 있도록 하는 클릭 이벤트를 만들어 보겠습니다. 그러나 그 전에는 닫힌 포트 번호를 사용하기 때문에 소켓이 작동할 수 있는 권한이 필요합니다. 데이터 전송을 허용하는 까다로운 권한이 표시되는 창이 나타납니다. 여기서는 생성된 IpEndPoint가 클라이언트를 식별하는 데 사용되지 않는다는 점에 유의해야 합니다.

그러나 서버 소켓을 식별하는 데 사용됩니다. 마찬가지로 클라이언트가 연결할 수 있도록 서버를 식별하는 `IP 주소`가 필요합니다. 소켓을 만든 후 IP를 소켓에 바인딩하는 `bind` 메서드를 호출합니다. 그런 다음 `listen` 메서드를 호출합니다. 이 작업은 열린 모든 `소켓`과 관련된 대기 큐를 만드는 작업을 담당합니다. `listen` 메서드는 대기 대기열에 머물 수 있는 클라이언트의 최대 수를 입력으로 사용합니다. 위에서 설명한 대로 `보내기` 및 `수신` 메서드를 통해 클라이언트와 통신이 있습니다. 소켓이 더 이상 필요하지 않으면 Shutdown 메서드를 호출한 다음 Close 메서드를 호출하여 소켓을 해제해야 합니다. 다음 예제에서는 소켓을 해제합니다. SocketShutdown 열거형은 소켓을 송신, 수신 또는 둘 다에 대해 닫아야 하는지 여부를 나타내는 상수를 정의합니다. 클라이언트가 메시지를 보내면 서버에서 메시지를 받으려고 시도합니다.

소켓이 이진 형으로 데이터를 보내려면 이진 유형으로 변환해야 합니다. 서버와 클라이언트조차도 메시지의 길이나 메시지 의 모든 것을 듣는 데 필요한 시간에 대해 아무것도 모른다는 것을 아는 것이 좋습니다. 그래서 우리는 “” 특수 문자열을 사용하여 메시지 끝에 문자 메시지가 끝나고 있음을 알려줍니다. 데이터를 수신하려면 BeginReceive가 호출됩니다: Send 메서드를 호출하려면 다음 코드 조각(정적 Send 메서드가 MyClass 클래스에 정의되어 있다고 가정). TCP/IP 소켓은 TcpClient 클래스를 사용하여 가져올 수 있습니다. TcpClient.Client 속성을 사용하여 기본 소켓을 가져옵니다(이 속성은 .NET Framework 2.0 이후 공용입니다). Receive 메서드는 바인딩된 소켓에서 버퍼로 데이터를 수신합니다.