2 augusti, 2019 Inopto_AB

python 소켓 통신 예제

기본적으로 두 가지 예외를 가진 TCP 소켓과 크게 비슷합니다. 메시지 경계의 위치를 정의하고 추적하는 것은 사용자에게 달려 있습니다. TCP 소켓과 관련해서는 네트워크에서 원시 바이트를 보내고 받는 것일 뿐입니다. 그것은 그 원시 바이트의 의미에 대해 아무것도 모른다. 끝까지 만들기에 축하합니다! 이제 자신의 응용 프로그램에서 소켓을 사용하는 방법에 대해 잘 확인했습니다. ”서버” 소켓이 있는 경우 potential_readers 목록에 넣습니다. 그것은 읽을 수있는 목록에 나오는 경우, 당신의 수락은 (거의 확실하게) 작동합니다. 다른 사람에게 연결할 새 소켓을 만든 경우 potential_writers 목록에 넣습니다. 쓰기 가능한 목록에 표시되면 연결된 상당한 기회가 있습니다. 다음은 수신 대기 소켓이 없는 포트에 연결 시도가 있을 때 표시되는 일반적인 오류입니다. macOS 및 Linux에서 확인하는 또 다른 장소는 파일 / etc / 호스트입니다. Windows에서 C:WindowsSystem32드라이버etc호스트를 참조하십시오. 호스트 파일에는 간단한 텍스트 형식으로 매핑을 처리하는 정적 이름 테이블이 포함되어 있습니다.

DNS는 완전히 퍼즐의 또 다른 조각이다. 스트리밍 소켓을 사용하면 언제든지 데이터를 보내거나 받을 수 있습니다. Python 프로그램이 일부 코드를 실행하는 도중에 있는 경우 다른 스레드가 새 소켓 데이터를 처리할 수 있습니다. 비동기와 같은 라이브러리는 여러 스레드를 구현하므로 Python 프로그램이 비동기 방식으로 작동 할 수 있습니다. 소켓 프로그래밍은 소켓 라이브러리를 가져오고 간단한 소켓을 만드는 것으로 시작됩니다. 앱이 실제로 그 이상의 작업을 수행한다고 가정하면 스레딩이 최적의 솔루션입니다(비차단 소켓사용이 차단 소켓을 사용하는 것보다 빠를 수 있음). 안타깝게도 유닉스의 스레딩 지원은 API와 품질면에서 모두 다릅니다. 따라서 일반적인 유닉스 솔루션은 각 연결을 처리하기 위해 하위 프로세스를 포크하는 것입니다. 이에 대한 오버헤드는 매우 큽니다(Windows에서는 이 작업을 수행하지 마십시오 – 프로세스 생성 오버헤드가 엄청납니다). 또한 각 하위 프로세스가 완전히 독립하지 않는 한 다른 형태의 IPC(파이프 또는 공유 메모리 및 세마포)를 사용하여 부모 프로세스와 자식 프로세스 간에 통신해야 합니다.

위의 이벤트 루프를 보면 sel.select()가 운전석에 있는 것을 볼 수 있습니다. 그것은 차단, 이벤트에 대 한 루프의 상단에 대기. 읽기 및 쓰기 이벤트가 소켓에서 처리될 준비가 되면 깨어나야 합니다. 즉, 간접적으로 메서드 process_events()를 호출할 수도 있습니다. 이것은 메서드 process_events()가 진입점이라고 말할 때 의미합니다. 이렇게 하면 상태를 다시 관리할 수 있습니다. 몇 가지 리팩터링 후 다른 메서드가 특정 값을 갖는 상태 변수에 의존하는 경우 read() 및 write()에서만 호출하기로 결정했습니다. 이렇게 하면 처리용 소켓에 이벤트가 들어올 때 논리를 가능한 한 간단하게 유지합니다.

Kontakta oss!