【发布时间】:2021-11-14 05:42:50
【问题描述】:
我无法从套接字获取数据。这是客户端(下图),其中“_sender”是套接字。我想要的是有一个与从服务器接收到的字节大小相同的缓冲区(我不知道先验)。所以我要做的是通过“可用”语句检查套接字(“_sender”)准备从服务器接收多少字节。 你觉得这个推理对吗?
byte[] bufferRec = new byte[0];
int bytesAvailable = 0;
int offset = 0;
System.Console.WriteLine(_sender.Available);
while (_sender.Available != 0)
{
bytesAvailable = _sender.Available;
Array.Resize(ref bufferRec, bufferRec.Length + bytesAvailable);
int read = _sender.Receive(bufferRec, offset, bytesAvailable, SocketFlags.None);
offset += read;
}
【问题讨论】:
-
您的实际问题是什么?
-
如果这是一个 TCP 套接字,那么你需要在它上面使用一些协议,因此你必须事先知道你需要读取多少字节,然后读取直到你读取了那么多字节。例如,您可以在“消息”前面加上其长度(以字节为单位),并使用前 2 或 4 个字节发送该长度。然后接收者首先准确地读取 2(4) 个字节,现在它知道消息的长度并且它读取了那么多。
标签: c# sockets server tcp client