c# 동기 소켓 예제 속시원내과 | 2019년 8월 3일

소켓 액세스 제한에 대한 소켓권한을 만들고 일치하는 IpEndPoint가 있는 소켓을 만든 후 원격 서버 호스트에 대한 연결을 설정해야 합니다. 다른 포트 번호를 선택할 수 있습니다. 그러나 클라이언트는 이에 대해 알고 있어야 합니다. 클라이언트가 메시지를 보내면 서버가 메시지를 얻으려고 시도합니다. 소켓이 이진 형으로 데이터를 보내려면 이진 유형으로 변환해야 합니다. 서버와 클라이언트조차도 메시지의 길이나 메시지 의 모든 것을 듣는 데 필요한 시간에 대해 아무것도 모른다는 것을 아는 것이 좋습니다. 그래서 우리는 “” 특수 문자열을 사용하여 메시지 끝에 문자 메시지가 끝나고 있음을 알려줍니다. 데이터를 수신하려면 BeginReceive가 호출됩니다: 데이터를 보내려면 바이트 배열을 Socket 클래스의 송신 데이터 메서드 중 하나(보내기 및 SendTo)에 전달합니다. 다음 예제는 Encoding.ASCII 속성을 사용하여 문자열을 바이트 배열 버퍼로 인코딩한 다음 Send 메서드를 사용하여 네트워크 장치로 버퍼를 전송합니다. Send 메서드는 네트워크 장치에 전송된 바이트 수를 반환합니다. 클라이언트의 소켓을 만들기 전에 사용자는 연결하려는 `IP 주소`를 결정해야 합니다.

동시에 소켓 자체에 속하는 `패밀리` 메서드도 필요합니다. 그런 다음 `연결` 방법을 통해 소켓을 서버에 연결합니다. 메시지를 보내기 전에 바이트 배열로 변환해야 합니다. 그런 다음에야 `보내기` 방법을 통해 서버로 보낼 수 있습니다. 나중에 `수신` 메서드 덕분에 서버에서 대답으로 바이트 배열을 얻을 수 있습니다. C 언어와 마찬가지로 `보내기` 및 `수신` 메서드는 여전히 보내거나 받은 바이트 수를 반환합니다. .NET 응용 프로그램에서 소켓을 사용하려면 다음 문을 사용하여 추가해야 합니다. 소켓의 강력한 기능 중 하나는 비동기 프로그래밍 모델의 사용입니다.

그 덕분에 소켓이 작업을 수행하는 동안 프로그램이 계속 실행될 수 있습니다. 이제 소켓을 IpEndPoint와 연결합니다: 소켓에는 주소가 있어야 합니다. 그것은 유형 IpEndPoint입니다. 각 소켓은 IP 주소를 통해 식별되며, 호스트의 컴퓨터를 찾는 데 유용하며 컴퓨터 내부의 소켓을 사용하는 프로그램을 식별하는 포트 번호도 있습니다. 비동기적으로 데이터를 수신하기 시작하려면 수신된 데이터에 대한 바이트 형식 배열, 버퍼의 제로 기반 위치 및 수신할 바이트 수가 필요합니다. 동기 클라이언트 소켓은 네트워크 작업이 완료되는 동안 응용 프로그램 프로그램을 일시 중단합니다. 동기 소켓은 작업을 위해 네트워크를 많이 사용하는 응용 프로그램에는 적합하지 않지만 다른 응용 프로그램의 네트워크 서비스에 대한 간단한 액세스를 가능하게 할 수 있습니다. 메시지를 보내려면 클라이언트는 “”을 추가하여 메시지의 끝을 표시하고 서버가 그랬던 것처럼 문자 메시지를 이진 형식으로 변환해야 합니다. 그런 다음 소켓은 이진 메시지를 매개 변수로 사용하는 Send 메서드를 호출하여 메시지를 보냅니다.

소켓은 클라이언트/서버 아키텍처를 기반으로 하므로 이 응용 프로그램은 서버와 클라이언트로 구성됩니다. 서버는 포트 번호를 예약합니다. 그런 다음 다가오는 클라이언트를 듣습니다. 그러면 클라이언트가 서버에 연결하려고 시도합니다. 연결이 성공하면 문자 메시지를 교환할 수 있습니다. 작업이 완료되면 연결이 닫힙됩니다. 수신 대기 상태에 소켓을 배치하고 연결할 수 있는 클라이언트 소켓 수를 지정합니다. 따라서 소켓의 기능을 활용하여 보다 풍부하고 강력한 소프트웨어를 빌드할 수 있습니다.

소켓은 네트워크를 사용하여 데이터를 전송하므로 프로토콜을 사용합니다. 이 컨텍스트에서 가장 잘 알려진 것은 빠르지만 신뢰할 수 없는 UDP와 신뢰할 수 있지만 빠르지는 않은 TCP입니다.

Comments are closed.