java - 等待\n 而不是 EOF C# SslStream

标签 java c# ssl printwriter sslstream

我正在使用 SslStream 来接受客户。
此代码从套接字读取 2048 个字节并将它们作为字符串返回。当我尝试使用我用 Java 编写的客户端进行连接时,服务器没有回复并卡在这一行:
bytes = sslStream.Read(buffer, 0, buffer.Length);
经过一番谷歌搜索,我发现服务器正在等待 EOF 完成消息。这很烦人,因为我构建的协议(protocol)需要等待 \n在消息的末尾。

有没有办法等待我选择的角色完成消息?
我尝试在客户端发送的消息末尾添加 EOF,但没有成功。我通过 PrintWriter 发送了消息.我用这个语句(Java)创建了它:

out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
socketSSLSocket .
我在网上找到的答案有点困惑,并没有解决我的问题。

服务器:
static string ReadMessage(SslStream sslStream) 
{
    // Read the  message sent by the client.
    // The client signals the end of the message using the
    // "<EOF>" marker.
    byte[] buffer = new byte[2048];
    StringBuilder messageData = new StringBuilder();
    int bytes = -1;
    do 
    {
        // Read the client's test message.
        bytes = sslStream.Read(buffer, 0, buffer.Length);

        // Use Decoder class to convert from bytes to UTF8
        // in case a character spans two buffers.
        Decoder decoder = Encoding.UTF8.GetDecoder();
        char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)];
        decoder.GetChars(buffer, 0, bytes, chars, 0);
        messageData.Append(chars);

        // Check for EOF or an empty message.
        if (messageData.ToString().IndexOf("<EOF>") != -1)
        {
            break;
        }
    } while (bytes != 0);

    return messageData.ToString();
}

将 EOF 添加到消息的末尾:
out.print(message + (char)-1);

另外,我试过这个:
out.print(message + "\r\n\r");

最佳答案

经过一番谷歌搜索,我发现为了发送最终信号,我需要使用 out.flush() 刷新套接字.

关于java - 等待\n 而不是 EOF C# SslStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59461231/

相关文章:

java - 将对象存储到临时对象中并且不更改原始对象值

http - 在没有 ssl 证书的情况下继续

c# - 为什么 ItemsSource 没有在 DataGrid 中更新

c# - 测试 UWP 蓝牙应用程序

c# - c#动态装饰对象

ruby-on-rails - Ruby 2.5.1、Rails 5.1.6、HTTParty post 返回 OpenSSL 错误

结帐时出现 Magento SSL 错误

java - Java 中的最终初始化可以推迟,这如何防止无意中返回 null?

java - 第一次按下时 KEYCODE_BACK 不起作用

java - 什么是 JSP 标签?