lierre

python 소켓 예제

다음 섹션에서는 이러한 문제를 해결하는 서버 및 클라이언트의 예를...

02 Août

다음 섹션에서는 이러한 문제를 해결하는 서버 및 클라이언트의 예를 살펴보겠습니다. select()를 사용하여 여러 연결을 동시에 처리하고 필요에 따라 send() 및 recv()를 호출합니다. 수행! 이제 몇 가지 기본 Python 네트워크 프로그래밍을 사용하여 클라이언트와 서버 간에 데이터 스트리밍을 시작할 수 있습니다. 가장 먼저 주의해야 할 점은 웹 브라우저의 « 클라이언트 » 소켓과 웹 서버의 « 클라이언트 » 소켓이 동일한 짐승이라는 것입니다. 즉, 이것은 « 피어 투 피어 » 대화입니다. 또는 디자이너로서, 다른 방법을 넣어, 당신은 대화에 대한 에티켓의 규칙이 무엇인지 결정해야합니다. 일반적으로 연결 소켓은 요청을 보내거나 서명한 것으로 대화를 시작합니다. 그러나 그것은 디자인 결정입니다 – 그것은 소켓의 규칙이 아닙니다. sel.register() 관심 있는 이벤트에 대 한 sel.select() 모니터링 할 소켓을 등록 합니다. 청취 소켓의 경우 선택기 의 읽기 이벤트를 원합니다.

이벤트_읽기. 다음 예제는 포트 80에서 example.org TCP 연결에 대 한 주소 정보를 반환: 소켓 및 바이트에 대 한 영향을 줄 수 있는 뭔가 언급 해야 합니다. 앞서 언급했듯이 소켓을 통해 데이터를 보내고 받을 때 원시 바이트를 보내고 받는 것입니다. 수신 대기 소켓이 이벤트 선택기에 등록되었기 때문에. EVENT_READ, 그것은 읽을 준비가되어 있어야합니다. sock.accept()를 호출한 다음 즉시 conn.setblocking(False)을 호출하여 소켓을 비차단 모드로 설정합니다. 이식성 경고: 유닉스에서 선택소켓과 파일 모두에서 작동합니다. Windows에서 이 것을 시도하지 마십시오. Windows에서 소켓에서만 작동합니다. 또한 C에서는 고급 소켓 옵션 의 대부분이 Windows에서 다르게 수행됩니다. 사실, Windows에서 나는 일반적으로 내 소켓과 함께 스레드 (매우 잘 작동하는)를 사용합니다. 당신이 어떤 종류의 성능을 원한다면, 그것을 직면, 코드는 유닉스에서보다 윈도우에서 매우 다르게 보일 것입니다.

대부분의 서버에는 두 개 이상의 네트워크 인터페이스가 있으므로 두 개 이상의 IP 주소가 있습니다. 각 IP 주소에 바인딩된 서비스의 별도 복사본을 실행 하는 대신 특수 주소 INADDR_ANY를 사용 하 여 모든 주소에서 동시에 들을 수 있습니다. 소켓은 INADDR_ANY에 대한 상수를 정의하지만 정수 값이며 바인딩()에 전달되기 전에 점선 표기형 문자열 주소로 변환해야 합니다. 바로 가기를 사용하여 변환을 수행하는 대신 빈 문자열 `을 사용합니다. 먼저 다중 연결 서버인 multiconn-server.py 살펴보겠습니다. 다음은 수신 대기 소켓을 설정하는 첫 번째 부분입니다: 출력을 보려면 먼저 소켓 서버 프로그램을 실행합니다. 그런 다음 소켓 클라이언트 프로그램을 실행합니다. 그런 다음 클라이언트 프로그램에서 무언가를 작성합니다.