python socket 통신 예제

우리는이 튜토리얼에서 땅을 많이 다루었다. 네트워킹과 소켓은 큰 주제입니다. 네트워킹이나 소켓을 사용하는 경우 모든 용어와 약어로 인해 권장하지 마십시오. 오류를 보기 전에 전송할 수 있는 데이터의 양을 확인하기 위해 테스트 서버에 연결하고 socket.send()를 반복적으로 호출하는 테스트 클라이언트를 작성했습니다. 테스트 서버는 socket.recv()를 호출하지 않습니다. 그것은 단지 연결을 수락합니다. 이렇게 하면 서버의 네트워크 버퍼가 채워지므로 결국 클라이언트에 오류가 발생합니다. 그런 다음 bind()를 사용하여 소켓을 서버 주소와 연결합니다. 이 경우 주소는 현재 서버를 참조하는 localhost이고 포트 번호는 10000입니다. 하지만 낙담하지 마십시오.

나는 당신을 위해이 튜토리얼을 작성했습니다. 파이썬과 마찬가지로 한 번에 조금씩 배울 수 있습니다. 브라우저의 북마크 기능을 사용하고 다음 섹션을 준비하면 다시 돌아옵니다. 소켓과 소켓 API는 네트워크를 통해 메시지를 보내는 데 사용됩니다. 그들은 프로세스 간 통신 (IPC)의 형태를 제공합니다. 네트워크는 컴퓨터에 대한 논리적로컬 네트워크이거나 외부 네트워크에 물리적으로 연결된 네트워크일 수 있으며, 다른 네트워크에 대한 자체 연결도 있습니다. 명백한 예는 ISP를 통해 연결하는 인터넷입니다. 우리는 socket.gethostname() 기능을 사용하여 호스트 주소를 얻을 수 있습니다. 1024보다 작은 포트 번호는 표준 인터넷 프로토콜에 대해 예약되어 있으므로 1024 이상의 사용자 포트 주소에 권장됩니다. 이제 클라이언트 측을 살펴보겠습니다. 파이썬 코드는 소켓사용을 제외하고 서버 측과 거의 비슷합니다 – 클라이언트는 connect() 메서드를 대신 사용합니다.

for 루프에서 온도 데이터는 sendall() 메서드를 사용하여 서버로 전송됩니다. time.sleep(2) 메서드의 호출은 다른 온도 판독값을 보내기 전에 클라이언트를 2초 동안 일시 중지합니다. 모든 온도 데이터가 목록에서 전송되면 close() 메서드를 사용하여 연결이 마침내 닫힙니다. 예를 들어 서버가 적극적으로 연결을 닫은 경우 운영 체제에 따라 TIME_WAIT 상태로 2분 이상 유지됩니다. TIME_WAIT 상태가 만료되기 전에 서버를 다시 시작하려고 하면 이미 사용 중이던 주소의 OSError 예외가 표시됩니다. 이는 네트워크의 지연된 패킷이 잘못된 응용 프로그램에 전달되지 않도록 하는 안전 장치입니다. 다음은 루프백 인터페이스에서 Wireshark를 사용하여 트래픽 캡처를 사용하는 스크립트의 예입니다: 오늘, 소켓 API에서 사용되는 기본 프로토콜이 수년에 걸쳐 진화했지만, 우리는 새로운 것들을 보았다, 낮은 수준 API는 동일하게 유지되었습니다. 이 자습서에는 Python을 사용하여 소켓 서버와 클라이언트를 빌드하는 세 가지 다른 반복이 있습니다: 사용되는 전송 계층 프로토콜에 따라 소켓이 호출될 때 socket.send()가 호출될 때 송신 버퍼의 모든 데이터가 호출되지 않았을 수 있습니다. 전송을 위해 대기하고 있습니다. 소켓의 네트워크 버퍼가 가득 찼을 수 있으며 socket.send()를 다시 호출해야 할 수 있습니다. 이것이 상태 검사가 있는 이유입니다.

create_response()는 한 번만 호출해야 하지만 _write()를 여러 번 호출해야 합니다. 소켓 서버가 포트 5000에서 실행되고 있지만 클라이언트에는 서버에 연결하려면 소켓 포트가 필요합니다. 이 포트는 클라이언트 연결 호출에 의해 임의로 할당됩니다. 이 경우 57822입니다. 여기에 tshark를 사용하여 위에 표시된 동일한 예입니다 : 이것은 하나 이상의 이유로, 정말 중요한 라인입니다! 소켓이 닫혀 있는지 확인할 뿐만 아니라 message.close()도 select()에 의해 모니터링되는 소켓을 제거합니다. 이렇게 하면 클래스의 코드가 크게 단순화되고 복잡성이 줄어듭니다. 예외가 있거나 명시적으로 자신을 제기하는 경우 close() 정리를 처리합니다. 가장 빠른 소켓 코드가 비차단 소켓을 사용하고 멀티플렉스로 선택한다는 것은 의심의 여지가 없습니다. CPU에 부담을 주지 않고 LAN 연결을 포화시키는 것을 함께 넣을 수 있습니다.

Comments are closed.