我想通過套接字從我的客戶端(它是一個 Java 應用程序)發送一個圖像到我的服務器,它應該用 Python 編程。不幸的是,我是 Python/Java 編程的新手,不理解我在網上找到的 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();如果我理解正確的話,只需將字節數組形式的圖像數據發送到接收端口?,F在在服務器(Python)上我有這個: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')它似乎在傳輸數據,因為在啟動我的 python 服務器文件然后運行 java 應用程序之后,我的 python 控制臺運行:客戶端連接... ('192.168.178.44', 51061) 寫文件....寫文件....寫文件....寫文件....寫文件....寫文件....寫入文件....完成寫入文件客戶端斷開連接然后我有一個名為“tst.jpg”的新文件,它在兩個路徑中具有相同的大小,但我無法打開它,因為它以某種方式損壞或損壞。你能告訴我出了什么問題嗎,請問我的代碼應該是什么樣子的?正如我所說,我是編程新手,對我應該做什么的模糊概念對我幫助不大。
1 回答

阿波羅的戰車
TA貢獻1862條經驗 獲得超6個贊
您的兩個代碼都可以,只是一件事。在 java 代碼中,您首先發送數據的大小,但在 python 代碼中,您不會將它與圖像分開。
最好的辦法就是不發送尺寸,而是通過發送整個圖像來開始發送。我的意思是評論這一行:
dos.writeInt(size);
它應該可以解決問題。
祝你好運。
添加回答
舉報
0/150
提交
取消