2
我正在开发一个android应用程序,其中我必须发送jpeg格式的帧分配给BufferedArrayOutputStream(代码中的baos变量)。我将这个baos转换成一个字节数组写入套接字。 在服务器端,我想以jpeg格式重建图像。如果我将变量中收到的数据写入服务器上的'.jpg'文件,在打开文件时会出现“文件以ffx0而非jpeg格式开头”的错误。我认为这是因为python中的字符串变量将数据作为十六进制字符串写入文件。 客户端代码如下: -如何将jpeg帧从java客户端传输到python服务器
Bitmap memoryImage = Bitmap.createBitmap(rgb, previewSize.width,previewSize.height,Bitmap.Config.ARGB_8888);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if(memoryImage.compress(CompressFormat.JPEG,100, baos)){
try {
if(count==0){
byte [] Finalbaos = baos.toByteArray();
int tempLen = Finalbaos.length;
Log.v("Client","ImageBytes :"+ tempLen);
String dataMeta = Integer.toString(tempLen);
Log.v("Client","Integer Size :"+ dataMeta.length());
PrintWriter tempOut = new PrintWriter(socket.getOutputStream());
if(tempOut!=null){
tempOut.write(dataMeta);
Log.v("Client","data size sent");
tempOut.flush();
}
DataInputStream in = new DataInputStream(socket.getInputStream());
if(in!=null){
Log.v("Client","read buffer created");
String xyz = in.readLine();
String temp = "recvd";
Log.v("Client",xyz);
if(xyz.equals(temp)){
OutputStream out = socket.getOutputStream();
out.write(Finalbaos,0,tempLen);
out.flush();
Log.d("Client", "Client sent message");
}
}
服务器代码:
import socket,thread
import string
import array
host=""
port=54321
s=socket.socket()
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((host,port))
s.listen(5)
conn,address=s.accept()
data=""
mylen=0
dataRecv=0
file1 = open("myfile.jpg","w")
totalLength=""
length=conn.recv(1024)
conn.send("recvd")
mylen=int(length)
while dataRecv<mylen:
newData=""
newData=conn.recv(1)
if not newData:
break
data+=newData
dataRecv+=len(newData)
result= array.array('B',data.decode("hex"))
file1.write(result)
file1.close()
print len(data)
conn.close()
s.close()
任何人都可以让我知道如何重建对服务器无论是在Python或C++
mylen = len(长度)对我来说是一个愚蠢的错误。我编辑它,它应该是int(长度)。在发送帧的数据之前,我发送服务器应该接收的帧的大小。 – geekoraul
Thankyou mata用于指出readline()中的错误。我期待它会自动检测行/字符串的结尾。 另外我还错误地认为,python字符串将数据编写为“hex”编码。 - 我删除了encode()函数并将'\ n'添加到由服务器发送的'recvd'字符串,并且我能够在我的服务器上获取该框架:)非常感谢! 任何想知道代码的人,请让我知道。 – geekoraul