python - 在 Python 中通过 Socket 读取图像文件
问题描述
我正在尝试通过 Python 套接字读取图像文件。我目前的尝试如下:
while True:
data = clientsocket.recv(1024)
receivedMessage = (data.decode(encoding='UTF-8')).strip()
if ("getFile" in receivedMessage):
f = open("test2.jpg","wb")
file_size = int(receivedMessage.replace('getFile',''))
# Message: e.g. getFile28049994
read_bytes = 0
print("READING FILE")
while file_size > read_bytes:
print("RECEIVING FILE")
bytes_read = clientsocket.recv(1024)
if not bytes_read:
print("END OF FILE")
print("CHECKPOINT") # this is never printed out
read_bytes = len(bytes_read)
#writing to file
该文件通过 Android 作为字节数组发送: 客户端类:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client extends AsyncTask<String, Void, Void> {
private MainActivity activity;
private Exception exception;
private byte[] data;
private String dataString;
public Client(MainActivity activity,byte[] data){
this.activity = activity;
this.data = data;
}
public Client(MainActivity activity,String dataString){
this.activity = activity;
this.dataString = dataString;
}
protected Void doInBackground(String... command) {
try{
Socket client = new Socket(".....", 50000);
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
if (data != null){
out.print(data);
}
if (dataString != null){
out.println(dataString);
}
String receivedMessage;
if ((receivedMessage = in.readLine()) != null){
if (receivedMessage.equals("connectionSuccessful")){
Intent intent = new Intent();
intent.setAction("sendServerMessage");
intent.putExtra("msg",receivedMessage);
activity.sendBroadcast(intent);
}
Log.e("Debug",receivedMessage);
}
client.close();
} catch(UnknownHostException e) {
Log.e("Exception","Unknown host");
}
catch(ConnectException e) {
Intent intent = new Intent();
intent.setAction("sendServerMessage");
intent.putExtra("msg","connectionFailed");
activity.sendBroadcast(intent);
Log.e("Exception","No I/O"+e);
}
catch (Exception e){
Log.e("Exception",""+e);
}
return null;
}
}
以及客户端的执行:
new Client(activity, bytes).execute(); // bytes is a byte array (checked it)
知道为什么没有收到吗?是因为我调用了两次clientsocket.recv吗?我该如何解决?提前致谢。
解决方案
推荐阅读
- javascript - 如何在 javascript 中获取返回的 GET 的特定部分?
- html - 如何防止 safari 和移动设备上的 overflow-x
- java - 如何在房间数据库中创建实体继承?
- python - 从 PIL 新创建的 Image 对象是什么格式?
- sql-server - 如何保证计算列中的信息删除后可以恢复?
- ios - 在核心数据中单独存储日值
- python - 如何在 Python3 中添加动态 MDC 到日志
- c# - 收到错误消息“当前上下文中不存在名称‘RouteConfig’”
- scripting - 用于将字符串中的特定单词更改为斜体的 DXL 脚本
- python - 如何在 pyarrow 中使用我们自己的模式从 CSV 创建镶木地板文件