Eu quero enviar uma imagem do meu cliente (que é um aplicativo Java) por soquete para o meu servidor, que deve ser programado em Python. Infelizmente, sou novo na programação Python / Java e não entendo as abordagens moast que encontrei on-line, mas o que parecia funcionar melhor até agora foi o seguinte:
No lado do cliente, eu fiz isso
String pathname = new String("C:\\Users\\vince\\Pictures\\Saved Pictures\\M249.jpg");
Socket photoSocket = new Socket(IP_ADDRESS, PORT_NO);
DataOutputStream dos = new DataOutputStream(photoSocket.getOutputStream());
FileInputStream fis = new FileInputStream(pathname);
int size = fis.available();
byte[] data = new byte[size];
fis.read(data);
dos.writeInt(size);
dos.write(data);
dos.flush();
dos.close();
fis.close();
photoSocket.close();
O que, se eu entendi corretamente, envia dados de imagem em forma de bytearray para a porta de recebimento.
Agora no servidor (Python) eu tenho o seguinte:
import socket # Import socket module
s = socket.socket() # Create a socket object
port = 1234 # Reserve a port for your service.
s.bind(("192.168.178.44", port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
conn, addr = s.accept()
print('client connected ... ', addr)
f = open('tst.jpg', 'wb')
while True:
data = conn.recv(1024)
if not data: break
f.write(data)
print('writing file ....')
f.close()
print("finished writing file")
conn.close()
print('client disconnected')
E parece transferir dados, porque depois de iniciar meu arquivo do servidor python e depois executar o aplicativo java, meu console python diz:
cliente conectado ... ('192.168.178.44', 51061) gravando arquivo .... gravando arquivo .... gravando arquivo .... gravando arquivo .... gravando arquivo .... gravando arquivo .... gravando arquivo .... escrevendo arquivo .... terminou de gravar o arquivo cliente desconectado
E então eu tenho um novo arquivo chamado "tst.jpg" e tem o mesmo tamanho nos dois caminhos, mas não consigo abri-lo porque está de alguma forma quebrado ou corrompido.
Você pode me dizer o que há de errado e também como deve ser o meu código? Como eu disse, sou novo em programação e conceitos vagos do que devo fazer não me ajudam muito.
seus dois códigos estão OK, apenas uma coisa. no código java, você está enviando o tamanho dos dados primeiro, mas no código python, não o separa da imagem.
a melhor coisa a fazer é não enviar o tamanho e começar a enviar a imagem inteira. Quero comentar esta linha:
dos.writeInt(size);
isso deve resolver o problema.
boa sorte.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras