0
소켓에 연결을 수신하고 클라이언트가 다양한 크기의 사전에 연결되면 서버를 보냅니다.파이썬 소켓, 클라이언트에 다음 데이터의 길이를 알려주는 int를 보냅니다.
클라이언트에게 수신 할 바이트 수를 알려주기 위해 먼저 사전의 크기를 보내려고합니다.
dic={'asdf':'1234', 'ghkj':'5678'}
serialized_dict = pickle.dumps(dic)
dic_size = sys.getsizeof(serialized_dict)
connection.send(dic_size)
connection.send(serialized_dict)
대략 클라이언트가 연결되면 서버가 수행하는 작업입니다.
이제는 dic_size
을 정수로 보낼 수 없습니다. 즉, 아마 직렬화해야 할 수도 있습니다. 그렇게하면 클라이언트에서 올바른 바이트 수를 읽고 정수 값을 받고 정수 값만큼의 바이트 수를 어떻게받을 수 있습니까?
같은 것을하지 마십시오 사용하는 필드의 끝을 표시하기 위해 SMTP 메일 서버를 믿지? 직렬화 된 데이터가 완전히 전송 된 시점을 알 필요가 있으므로 변수에 socket.recv (lenght)를 할당하고 역 직렬화 할 수 있습니다. 아니면 여기에 뭔가 빠졌나요? –
@ boolean.is.null 나는 내 대답을 업데이트했다. 수업을 위해 만든 SMTP 메일 서버에서 작업 한 일부 코드를 가져왔다. 모든 코드가 필요한 것은 아니지만 기본 개념입니다. 구분 기호를 얻을 때까지 계속 바이트를 수신합니다. 코드가 거의 모든 것을 설명합니다 –
감사합니다. 거기에 대한 접근 방식을 이해하지만 데이터가 직렬화되고 직렬화 될 때까지 검색 할 수 없기 때문에 시나리오에 해당되지 않는다고 생각합니다. –