akk*_*kas 2 python sockets android
我正在开发一个与基于 Python 的服务器通信的 Android 应用程序。我正在使用套接字进行通信。Android 应用程序使用 DataOutputStream.writeUTF() 以 JSON 格式发送数据。发送数据的代码如下
DataOutputStream dataOutputStream = new DataOutputStream(
socket.getOutputStream());
JSONObject jsonData=new JSONObject();
jsonData.put("request", "signin");
dataOutputStream.writeUTF(jsonData.toString());
Run Code Online (Sandbox Code Playgroud)
我面临的问题是 DataOutputStream.writeUTF() 在数据的开头写入两个字节,这是发送的数据长度。为了在服务器端接收数据,我必须先进行 2 次读取以获取数据长度,然后再进行两次读取以获取实际数据。Python中接收数据的代码如下
data = conn_stream.recv(2)
data_length=struct.unpack('>H',data)[0]
data=conn_stream.recv(data_length)
Run Code Online (Sandbox Code Playgroud)
是否有任何与 Java DataInputStream.readUTF() 等效的 Python?
下面的DataInputStream类提供了(几乎)Javas DataInputStream 中定义的所有方法,用于从包括readUTF()方法的输入流中读取原始 Java 数据类型。
"""
Reading from Java DataInputStream format.
"""
import struct
class DataInputStream:
def __init__(self, stream):
self.stream = stream
def read_boolean(self):
return struct.unpack('?', self.stream.read(1))[0]
def read_byte(self):
return struct.unpack('b', self.stream.read(1))[0]
def read_unsigned_byte(self):
return struct.unpack('B', self.stream.read(1))[0]
def read_char(self):
return chr(struct.unpack('>H', self.stream.read(2))[0])
def read_double(self):
return struct.unpack('>d', self.stream.read(8))[0]
def read_float(self):
return struct.unpack('>f', self.stream.read(4))[0]
def read_short(self):
return struct.unpack('>h', self.stream.read(2))[0]
def read_unsigned_short(self):
return struct.unpack('>H', self.stream.read(2))[0]
def read_long(self):
return struct.unpack('>q', self.stream.read(8))[0]
def read_utf(self):
utf_length = struct.unpack('>H', self.stream.read(2))[0]
return self.stream.read(utf_length)
def read_int(self):
return struct.unpack('>i', self.stream.read(4))[0]
Run Code Online (Sandbox Code Playgroud)
例子:
with open('/tmp/stream', 'rb') as f:
dis = DataInputStream(f)
val = dis.read_int()
string = dis.read_utf()
Run Code Online (Sandbox Code Playgroud)
注意:您应该注意该类没有异常处理,并且它处理带有 NULL 字符的 UTF 字符串的方式可能不准确。
源代码来自这里。
| 归档时间: |
|
| 查看次数: |
2663 次 |
| 最近记录: |