파이썬 이미징 라이브러리로 이미지를 그리는 서버 측 함수가 있습니다. Java 클라이언트는 소켓을 통해 반환되고 BufferedImage로 변환 된 이미지를 요청합니다.자바 클라이언트와 Twisted Python 소켓 서버간에 버퍼링 된 이미지 보내기
전송할 이미지의 크기와 CR 다음에 데이터의 접두어를 붙입니다. 그런 다음 소켓 입력 스트림에서이 수의 바이트를 읽고 ImageIO를 사용하여 BufferedImage로 변환하려고 시도합니다.
public String writeAndReadSocket(String request) {
// Write text to the socket
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write(request);
bufferedWriter.flush();
// Read text from the socket
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Read the prefixed size
int size = Integer.parseInt(bufferedReader.readLine());
// Get that many bytes from the stream
char[] buf = new char[size];
bufferedReader.read(buf, 0, size);
return new String(buf);
}
public BufferedImage stringToBufferedImage(String imageBytes) {
return ImageIO.read(new ByteArrayInputStream(s.getBytes()));
}
서버 : 축약 된 클라이언트에 대한 코드에서
이 문자열을 전송 및 수신을 위해 작동하지만, 이미지 변환 (일반적으로) 실패# Twisted server code here
# The analog of the following method is called with the proper client
# request and the result is written to the socket.
def worker_thread():
img = draw_function()
buf = StringIO.StringIO()
img.save(buf, format="PNG")
img_string = buf.getvalue()
return "%i\r%s" % (sys.getsizeof(img_string), img_string)
. 이미지가 제대로 읽히지 않는 이유를 이해하려고합니다. 가장 좋은 추측은 클라이언트가 적절한 바이트 수를 읽지 않는다는 것입니다. 그러나 솔직히 그것이 왜 그런지 알지 못합니다.
사이드 노트 : -에 - 문자열 - 투 - 바이트 - 투 - BufferedImage에 자바 로직 로터리이지만, 바이트 스트림을 읽는 것은 바로 같은 오류를 생산
- 나는 문자 []는 것을 알고 있습니다.
- 나는 클라이언트 소켓이 영속적이지 않은이 버전의 작업을하고있다. 요청이 처리되고 연결이 끊어집니다. 이미지 크기를 신경 쓸 필요가 없으므로이 버전이 제대로 작동하지만 이유를 제안했습니다. 제안 된 방법이 작동하지 않습니다.
입니다 (크기는 "네트워크 순서"대신
DataInputStream
을 사용할 수있는 고정 된 크기의 진 정수 ...로 전송 된 경우) 그건 잘못 될 수 있습니다) 왜 당신은 서버에 바이너리 데이터를 보내지 않습니까? – GETah당신이 맞습니다. 저는 화학 실험실에서 일하고 있으며, 우리는 역사적으로 논문으로 직접 번역하지 않는 것을 무시합니다. 나는 그것을 고치려고 노력하고 있지만, 나는 경험 많은 코더가 아니다. – PattimusPrime