tcp/ip 소켓 프로그래밍 예제

소켓 호출 차단은 비차단 모드로 설정하여 즉시 반환할 수 있습니다. 이렇게 하면 준비가 되면 소켓 작업을 처리하도록 응용 프로그램을 최소한 리팩터링하거나 다시 디자인해야 합니다. 일반 close() 함수는 소켓을 닫고 TCP 소켓을 종료하는 데 사용됩니다. 성공하면 0, 오류시 -1을 반환합니다. 먼저 다중 연결 서버, multiconn-server.py 살펴보겠습니다. 다음은 수신 대기 소켓을 설정하는 첫 번째 부분입니다: sel.register()에게 EVENT_WRITE를 모니터링하라고 말한 경우 이벤트 루프는 즉시 깨어나고 이것이 사실이라는 것을 알려줍니다. 그러나 이 시점에서 는 소켓에서 해제하고 send()를 호출할 이유가 없습니다. 요청이 아직 처리되지 않았기 때문에 보낼 응답이 없습니다. 이렇게 하면 귀중한 CPU 주기를 소비하고 낭비할 수 있습니다. 이 서버와 에코 서버의 가장 큰 차이점은 비차단 모드에서 소켓을 구성하는 lsock.setblocking(False)을 호출하는 것입니다. 이 소켓에 대한 호출은 더 이상 차단되지 않습니다. sel.select()와 함께 사용하면 아래에서 볼 수 있듯이 하나 이상의 소켓에서 이벤트를 기다린 다음 준비가 되면 데이터를 읽고 쓸 수 있습니다.

이 예제에서는 호스트 인수에 대한 빈 문자열을 전달하여 모든 인터페이스에서 수신 대기할 수 있도록 서버를 실행합니다. 이렇게하면 클라이언트를 실행하고 다른 네트워크에있는 가상 컴퓨터에서 연결할 수 있습니다. 그것은 큰 엔디안 PowerPC 기계를 에뮬레이트합니다. 클라이언트가 서버와 통신할 수 있도록 서버를 올바른 주소에 바인딩하는 것이 중요합니다. 이전 예제에서는 모두 `localhost`를 IP 주소로 사용했으며, 이 주소는 동일한 서버에서 실행되는 클라이언트에 대한 연결을 제한합니다. gethostname()에서 반환된 값과 같은 서버의 공용 주소를 사용하여 다른 호스트가 연결할 수 있도록 합니다. 이 예제는 명령줄 인수를 통해 지정된 주소에서 수신하도록 에코 서버를 수정합니다. 다음은 소켓으로 작업할 때 발생할 수 있는 몇 가지 일반적인 오류입니다. « 수신 대기 » 소켓: socket.send()가 호출될 때 송신 버퍼의 모든 데이터가 전송을 위해 큐에 대기되지 않았을 수 있음을 기억하십시오. 소켓의 네트워크 버퍼가 가득 찼을 수 있으며 socket.send()를 다시 호출해야 할 수 있습니다. 이것이 상태 검사가 있는 이유입니다. create_response()는 한 번만 호출해야 하지만 _write()를 여러 번 호출해야 합니다.

기본적으로 소켓은 항상 차단 모드에서 만들어집니다. 세 가지 모드에 대한 설명은 소켓 시간 시간에 대한 참고 를 참조하십시오. 즉, 소켓에서 청크로 읽는 것입니다. recv()를 호출하고 응용 프로그램에 적합한 완전한 메시지를 갖기에 충분한 바이트를 읽을 때까지 데이터를 버퍼에 저장해야 합니다. 수신 소켓이 없는 포트에 연결 시도가 있을 때 표시되는 일반적인 오류는 다음과 같습니다. 소켓. 첫 번째 단계는 소켓 함수를 호출하여 통신 프로토콜의 유형을 지정하는 것입니다(IPv4에 기반한 TCP, IPv6, UDP에 기반한 TCP). 이 예제 응용 프로그램에서 응용 프로그램 계층 프로토콜은 헤더를 UTF-8 인코딩이 있는 유니코드 텍스트로 정의합니다. 메시지의 실제 콘텐츠인 메시지 페이로드의 경우 필요한 경우 바이트 순서를 수동으로 교환해야 합니다.

Ce contenu a été publié dans Non classé. Vous pouvez le mettre en favoris avec ce permalien.

Les commentaires sont fermés.