套接字接收缓冲区大小

Kan*_*hka 3 c# sockets c#-3.0

有没有办法在c#中确定TCPIP套接字的接收缓冲区大小.我正在向服务器发送一条消息,并期待一个我不确定接收缓冲区大小的响应.

            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.125.125.226"),20060);
            Socket server = new Socket(AddressFamily.InterNetwork,
                              SocketType.Stream, ProtocolType.Tcp);
            server.Connect(ipep);

            String OutStr= "49|50|48|48|224|48|129|1|0|0|128|0|0|0|0|0|4|0|0|32|49|50";

            byte[] temp = OutStr.Split('|').Select(s => byte.Parse(s)).ToArray(); 

            int byteCount = server.Send(temp);

            byte[] bytes = new byte[255];
            int res=0;
            res = server.Receive(bytes);
            return Encoding.UTF8.GetString(bytes);
Run Code Online (Sandbox Code Playgroud)

sas*_*ang 6

用于接收数据的缓冲区大小取决于应用程序或协议.在语言中没有办法告诉你接收缓冲区的大小应该是多少.也没有任何套接字函数可以使用"你需要一个23867字节来接收这条消息".通常,您的应用程序必须从协议中确定接收缓冲区的大小以及如何处理它.通常协议将:

  • 指定消息中的字节数.
  • 指定一个终止字符(例如hdlc使用0x7e表示消息的结尾)

这样做的结果是您的应用程序可能需要处理拆分消息.例如,服务器可能会发送一个2000字节的消息,但您的接收缓冲区只有1000字节,您必须编写一些代码来维护状态,告诉您是否已完成消息或部分完成.