gpt4 book ai didi

asp.net - .NET 中的 Tcp/Ip 套接字连接

转载 作者:可可西里 更新时间:2023-11-01 02:32:41 25 4
gpt4 key购买 nike

对于我当前的项目,我需要通过 tcp/ip 套接字连接请求 XML 数据。为此,我使用了 TcpClient 类:

Dim client As New TcpClient()
client.Connect(server, port)

Dim stream As NetworkStream = client.GetStream()
stream.Write(request)
stream.Read(buffer, 0, buffer.length)

// Output buffer and return results...

现在这对于小响应来说工作得很好而且花花公子。但是,当我开始接收更大的数据 block 时,数据似乎会突发地通过套接字连接推送。发生这种情况时,stream.Read 调用仅读取第一个突发,因此我错过了响应的其余部分。

处理此问题的最佳方法是什么?最初我试图循环直到我有一个有效的 XML 文档,但我发现在 stream.Read 调用之间,底层流有时会关闭,我会错过数据的最后一部分。

最佳答案

您创建一个阅读循环。

Stream.Read 为目前读取的字节数返回 int,如果到达流末尾则为 0。

所以,它就像:

int bytes_read = 0;
while (bytes_read < buffer.Length)
bytes_read += stream.Read(buffer, bytes_read, buffer.length - bytes_read);

编辑:现在的问题是如何确定缓冲区的大小。如果您的服务器首先发送大小,没关系,您可以使用上面的代码片段。但是如果你必须读取直到服务器关闭连接,那么你必须使用 try/catch(即使你知道大小也是个好主意),并使用 bytes_read 来确定你收到了什么。

int bytes_read = 0;
try
{
int i = 0;
while ( 0 < (i = stream.Read(buffer, bytes_read, buffer.Length - bytes_read) )
bytes_read += i;
}
catch (Exception e)
{
//recover
}
finally
{
if (stream != null)
stream.Close();
}

关于asp.net - .NET 中的 Tcp/Ip 套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/168415/

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