如何通过套接字连接接收大数据流-没有TCPClient

本文关键字:数据流 没有 TCPClient 何通过 套接字 连接 | 更新日期: 2023-09-27 18:03:55

我有问题,我想通过SocketConnection发送一个大字符串,但我不能立即接收字符串,因为网络限制为1500字节,所以我怎么能在套接字上接收所有字节而不使用TCPClient,或者这是不可能的。

    public string ReceiveString(Socket connection)
    {
        byte[] buffer = new byte[1048576];
        int recBytes = connection.Receive(buffer);
        return UnicodeEncoding.Unicode.GetString(buffer, 0, recBytes);
    }

这就是我目前所知道的。

如果不可能,通过套接字获取,我可以从套接字中获取端点以使用TCPClient作为"最后选项"吗?

如何通过套接字连接接收大数据流-没有TCPClient

TCP是字节流,它没有消息的概念。网络上单个数据包的大小无关紧要,它只是网络硬件的一个实现细节。TCP保证你发送的就是你接收的(但是在单个发送的大小和单个读取的大小之间没有一对一的关系,就像在UDP中一样)。

解决方案要求发送方以允许读取方知道何时停止读取的方式将字符串数据框起来。:

  1. 发送字符串数据前的字符串长度。读取器可以先读取长度,然后再读取后面指定的字节数。

  2. 。使用唯一分隔符结束字符串,该分隔符不能出现在字符串本身中。然后阅读器可以继续阅读,直到遇到分隔符。

    b。分隔符可以是连接的闭包。读取器可以继续读取,直到检测到断开。

您需要使用哪种解决方案取决于您正在实现的特定协议。#1最适合二进制协议,并允许有效的内存管理,而#2更适合基于文本的协议,或无法提前知道最终长度的流协议。有时,当#1和#2a无法实现时,协议不得不求助于#2b (HTTP和FTP都使用它作为时间)。