Android - 防止写入OutputStream

时间:2017-05-04 17:23:27

标签: java android sockets

问题

我正在开发一个远程应用程序来通过套接字来控制远程机器上的软件 在我的应用程序和软件之间有一种路由器/反向代理(软件)将我的命令传递给所需的软件。

不幸的是,目前这个路由器不支持分块请求,即所有命令必须在同一个TCP数据包中接收,否则它会将其解释为两个分离的命令。

在某些设备上一切顺利。但是其他一些命令被分成两个独立的数据包,并且路由器无法正确解释。

我想阻止请求分块。这可能吗(Android方面)?

技术细节

Java代码

在我的应用中,我使用SocketDataOutputStream发送命令,如下所示:

socket = new Socket(ip, port);
out = new DataOutputStream(socket.getOutputStream());

与路由器通信的protocole有点奇怪但是我需要首先发送一个HTTP头(用于某种身份验证),等待来自服务器的OK,然后发送我的命令(没有头这个时间)
我这样做是这样的:

# Sending header
out.writeBytes("SOURCE content HTTP/1.0\n" +
                "Content-type: type\n" +
                "Authorization: Basic\n" +
                "Nom: rouge\n\n");
# Getting server answer
String answer;
int charsRead;
char[] buffer = new char[256];
charsRead = in.read(buffer);
answer = new String(buffer).substring(0, charsRead);

# ... A little bit of computation of the answer to know if it's OK

# Sending my command to server
out.writeBytes("0 rouge violet getNext 1");

# Same as above to get and compute response 

用于测试的设备

  • “Chunking”设备:LG Nexus 5X - Android 7.1.2 - API 25
  • “非分块”设备:Kesa TM708(60美元便宜平板电脑) - Android 5.1.1 - API 22
    这两个设备上的代码完全相同

Wireshark捕获

这里发送了两个请求: Wireshark captures

谢谢:)

0 个答案:

没有答案