gpt4 book ai didi

c# - 如何在C#中获取套接字缓冲区大小

转载 作者:可可西里 更新时间:2023-11-01 02:34:56 24 4
gpt4 key购买 nike

我有一个通过 TCP/IP 进行通信的套接字代码。我与之通信的机器在其缓冲区中有缓冲区数据。目前我正在尝试使用此代码获取缓冲区数据。

byte data = new byte[1024];
int recv = sock.Receive(data);
stringData = Encoding.ASCII.GetString(data, 0, recv);

但是这段代码只检索了 11 行数据,而机器缓冲区中有更多数据。这是因为我使用了 int recv = sock.Receive(data); 并且数据是 1024 ?如果是,如何获取总缓冲区大小并将其检索到字符串中。

最佳答案

如果您认为您丢失了一些数据,那么您需要检查 recv 并且几乎可以肯定:loop。幸运的是,ASCII 始终是单字节 - 在大多数其他编码中,您还必须担心接收部分字符。

一个常见的方法基本上是:

int recv;
while((recv = sock.Receive(data)) > 0)
{
// process recv-many bytes
// ... stringData = Encoding.ASCII.GetString(data, 0, recv);
}

请记住,不能保证 stringData 将是任何特定的完整工作单元;您发送的内容并不总是您收到的内容,它可能是单个字符、14 行,或者一个单词的后半部分和另一个单词的前半部分。在您有一个完整的逻辑帧要处理之前,您通常需要维护自己的接收数据的后台缓冲区。

但是请注意,Receive 总是尝试返回某物(至少一个字节),除非入站流已关闭 - 并且会阻止这样做。如果这是一个问题,您可能需要检查可用缓冲区 (sock.Available) 来决定是同步接收还是异步接收(即在数据可用时同步读取,否则请求异步读取) .

关于c# - 如何在C#中获取套接字缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22554590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com