1

我正在尝试使用将字符串写入 OutputStream

public  SSLSocket         mClient;
private BufferedOutputStream  mOutputStream;

....

mOutputStream = new BufferedOutputStream( mClient.getOutputStream() );

public synchronized void WriteString( String asciiString )
{
    mOutputStream.write( asciiString.getBytes() );
    mOutputStream.write( 0 );
    mOutputStream.flush();
}

....

WriteString( "BASEL ..." );

我使用此方法成功传输了一个不同的字符串,然后(响应通过流接收到的消息)尝试发送上面的消息。

在这个调用中,写操作在“B”被写入后立即刷新缓冲区,导致两个数据包通过流发送。第一个是单个字符;第二个包含字符串的其余部分。在最近更新服务器之前,这在 Linux 上正常工作。

有什么方法可以强制 OutputStream 或 BufferedOutputStream 将 write() 视为原子操作,或者在 flush() 之前不传输?

我也试过

private DataOutputStream  mOutputStream;
mOutputStream.writeBytes(asciiString);
mOutputStream.writeByte(0);
mOutputStream.flush();

结果相同。

4

1 回答 1

0

问题在于 SSLSocket 中 CDC 编码的实现发生了变化。为了避免安全问题,它总是在第一个字节之后中断消息。

有关完整说明,请参阅stackoverflow.com/a/33360518/4454122

于 2017-06-30T16:49:45.093 回答