从 C# 中的 WebSocket 流中读取整个字符串 [重复]

Posted

技术标签:

【中文标题】从 C# 中的 WebSocket 流中读取整个字符串 [重复]【英文标题】:Read whole Strings from WebSocket Stream in C# [duplicate] 【发布时间】:2020-03-28 21:27:12 【问题描述】:

我对 C# 很陌生。

在 Java 中,我们可以从 WebSocket 的 InputStream 中读取整个字符串。 例如:

dis = new DataInputStream(clientSocket.getInputStream());
String command = dis.readUTF();

等等……

是否可以在 C# 中做同样的事情,因为到目前为止我发现的唯一可能的方法是读取字节?

Byte[] bytes = new Byte[client.Available];
stream.Read(bytes, 0, bytes.Length);

如果没有解决方法,并且我们只能读取 C# 中的单个字节,我如何确定用户是否按下了 ENTER 按钮(这意味着命令已完成,我可以在服务器上处理它-边)?

【问题讨论】:

我将传入的字节值与 10 或 13 进行了比较,这似乎可行。但我不认为这是我们从用户那里获取全部命令的唯一方法。 【参考方案1】:

要读取一行(即后面跟着“\r”和/或“\n”的字符串),请使用StreamReader.ReadLine

string command;
using (StreamReader sr = new StreamReader(clientSocket.getInputStream())

    command = sr.ReadLine();

或其异步等效项StreamReader.ReadLineAsync

string command;
using (StreamReader sr = new StreamReader(clientSocket.getInputStream())

    command = await sr.ReadLineAsync();

来自documentation 为StreamReader.ReadLine

从当前流中读取一行字符并将数据作为字符串返回。 ... 行定义为字符序列后跟换行符 ("\n")、回车符 ("\r") 或回车符后紧跟换行符 ("\r\n")。

【讨论】:

谢谢你,杰里米!

以上是关于从 C# 中的 WebSocket 流中读取整个字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 IPC C# 时如何有效地从管道流中读取

C# 从 UTF-8 流中读取字符串的正确方法

从内存流中读取存储的 PDF

字节流和字符流

Java字节流之ByteArrayInputStream

用于从流中读取多个 protobuf 消息的 python 示例