나는 간단한 파이썬 TCP 서버 (나는 클래스를 사용하고있다.) 자바 클라이언트에서 데이터를 받아야하는 문제가있다. 여기자바 클라이언트에서 파이썬 소켓 recv
서버 측 코드 :
addr = InetAddress.getByName(hostname);
SocketAddress sockaddr = new InetSocketAddress(addr, port);
clientSocket = new Socket();
clientSocket.connect(sockaddr, timeoutMs);
clientSocketDataOutputStream = new DataOutputStream(clientSocket.getOutputStream());
int requestCode = 1;
clientSocketDataOutputStream.writeInt(requestCode);
clientSocketDataOutputStream.flush();
내가 파이썬 서버를 시작하고 그때에 정수를 보낼 수있는 클라이언트를 실행하려고 :
class ServerRequestHandler(SocketServer.BaseRequestHandler):
[...]
def handle(self):
requestCode = struct.unpack('>i', self.request.recv(4))[0]
[...]
[...]
다음은 클라이언트가 서버.
서버 측에서는 recv(4)
함수가 4 바이트를 읽지 않기 때문에 예외가 발생하지만 1 바이트 만 반환합니다.
실제로 Java 클라이언트는 정확히 4 바이트를 읽습니다. recv(1)
을 4 번 호출하면 올바르게 읽습니다.
내 Java 클라이언트의 동일한 작업을 실행하는 Python 클라이언트를 작성하려고 시도했으며이 경우 서버의 recv(4)
이 잘 작동합니다.
이 문제를 해결하는 방법은 무엇입니까? 바이트 단위로 소켓에서 읽는 간단한 파이썬 buffered reader function
을 구현할 생각 이었지만 더 똑똑한 솔루션이 존재한다고 확신합니다.