我必须将我的应用程序与现有的(不可修改的)Python 脚本集成,该脚本发送不带 '\0' 或任何其他“消息结束”字符的 JSON 消息。有没有更好的方法来处理传入的消息,只是从套接字一个字节一个字节地读取数据并计数括号?由于协议,在此应用程序中发送{
或}
消息内容是非法的,因此此代码可以正常工作,但在我看来很难看:
int i = 0;
int brackets = 0;
byte[] msg = new byte[4096];
do
{
byte chunk = reader.readByte();
msg[i++] = chunk;
if (chunk == 123) // check if '{'
brackets++;
else if (chunk == 125) // check if '}'
brackets--;
} while ( brackets > 0);
byte[] finalMsg = Arrays.copyOfRange(msg, 0, i);
编辑Python 代码:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((server_ip, server_port))
logging.info('Connected to: %s', (server_ip, server_port))
s.send(json.dumps(data))
logging.info('Sent message: %s', json.dumps(data))
我使用字节分析文本,因为该脚本将每个字符作为单个字节发送,据我所知char
,Java 中的长度为 2 个字节。当我尝试接收 char-after-char 数据时,我无法将它们与{
and进行比较}
。