我想通過(guò)套接字從我的客戶端(它是一個(gè) Java 應(yīng)用程序)發(fā)送一個(gè)圖像到我的服務(wù)器,它應(yīng)該用 Python 編程。不幸的是,我是 Python/Java 編程的新手,不理解我在網(wǎng)上找到的 moast 方法,但到目前為止似乎效果最好的是:在客戶端,我這樣做了 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();如果我理解正確的話,只需將字節(jié)數(shù)組形式的圖像數(shù)據(jù)發(fā)送到接收端口?,F(xiàn)在在服務(wù)器(Python)上我有這個(gè):import socket # Import socket modules = socket.socket() # Create a socket objectport = 1234 # Reserve a port for your service.s.bind(("192.168.178.44", port)) # Bind to the ports.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')它似乎在傳輸數(shù)據(jù),因?yàn)樵趩?dòng)我的 python 服務(wù)器文件然后運(yùn)行 java 應(yīng)用程序之后,我的 python 控制臺(tái)運(yùn)行:客戶端連接... ('192.168.178.44', 51061) 寫文件....寫文件....寫文件....寫文件....寫文件....寫文件....寫入文件....完成寫入文件客戶端斷開(kāi)連接然后我有一個(gè)名為“tst.jpg”的新文件,它在兩個(gè)路徑中具有相同的大小,但我無(wú)法打開(kāi)它,因?yàn)樗阅撤N方式損壞或損壞。你能告訴我出了什么問(wèn)題嗎,請(qǐng)問(wèn)我的代碼應(yīng)該是什么樣子的?正如我所說(shuō),我是編程新手,對(duì)我應(yīng)該做什么的模糊概念對(duì)我?guī)椭淮蟆?
1 回答

阿波羅的戰(zhàn)車
TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的兩個(gè)代碼都可以,只是一件事。在 java 代碼中,您首先發(fā)送數(shù)據(jù)的大小,但在 python 代碼中,您不會(huì)將它與圖像分開(kāi)。
最好的辦法就是不發(fā)送尺寸,而是通過(guò)發(fā)送整個(gè)圖像來(lái)開(kāi)始發(fā)送。我的意思是評(píng)論這一行:
dos.writeInt(size);
它應(yīng)該可以解決問(wèn)題。
祝你好運(yùn)。
添加回答
舉報(bào)
0/150
提交
取消