클라이언트가 서버에서 연결을 끊을 때 'try :'블록의 함수 내부에서 예외를 발생시킬 수 있습니까?

에릭 파커

파이썬 소켓으로 간단한 서버-클라이언트 채팅방을 구축하려고합니다.

다음 코드가 있습니다.

def handle_connection(client):
    while(1):
        try:
            message = receive_message()
            broadcast(message["data"])
        except:     # for now i don't mind which exception
              print("client disconnected")


def receive_message(client_socket):
    try:
        message_header = client_socket.recv(HEADER)
        if len(message_header) == 0:
            return False
        message_length = int(message_header.decode("utf-8"))

        message = client_socket.recv(message_length).decode("utf-8")
        return {"header": message_header, "data": message}

    except:  # most likely will trigger when a client disconnects
        return False

어디 receive_message()그것의 내부에 대한 호출 client.recv(HEADER)과 반환 중 False어떤 메시지가없는 경우, 또는 {"header": msg_header, "data": msg}모든 것이 확인됩니다.

내 질문은 : 클라이언트 CLI client.recv()가 닫혀서 내부에 실패 receive_message()하면 예외가 발생하고 인쇄 "client disconnected"됩니까?

나는 작동한다고 생각하는 다음 솔루션을 생각해 냈습니다.

위 코드에서 handle_disconnection()내부의 모든 내용을 처리 하는 함수를 정의했습니다 except.

def handle_connection(client_socket):
    while 1:
        try:
            message = receive_message()
            if not message:
                handle_disconnection(client_socket)
                break
            broadcast(message["data"])

        except:     # client disconnected
            handle_disconnection(client_socket)
            break

이것이 문제에 대한 유효하고 올바른 프로그래밍 접근 방식입니까? 이 접근 방식이 잘못된 경우 어떻게 올바르게 처리 할 수 ​​있습니까?

Lukasz Puchala

경우 client.recv()예외가 발생합니다 당신의 내부에 그것을 처리 할 receive_message()handle_connection()예외를받을 수 없습니다.

예외 또는 if-else로 흐름을 제어하려는 상황을 식별하는 것이 좋습니다. 연결 문제가있을 때 receive_message()메시지 값을 반환하거나 던져야 한다고 생각 합니다 ConnectionError. 소켓에서 메시지가없는 경우 반환 None하거나 발생시킬 수 있습니다 NoMessagesAvailableError.

모든 예외가 아닌 지정된 예외를 포착해야한다는 규칙도 있습니다. client disconnected메모리가 부족하면 코드가 인쇄 됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관