C# UDP 发送缓冲区

标签 c# sockets udp buffer

我正在制作一个将发送 1MB 长度数据的应用程序。 Bellow 是我的测试代码,它只是发送一个简单的 1MB 字节数组,但是即使我尝试将发送缓冲区增加到 1MB 或更高,它也会不断抛出 bellow 异常。

代码

private void sendattack(string ip, int port)
    {
        IPEndPoint RemoteEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
        Socket serversoc = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        char[] data = new char[100000];
        var send = Encoding.ASCII.GetBytes(data);
        serversoc.SendTo(send, send.Length, SocketFlags.None, RemoteEndPoint);
    }

错误

A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself

System.Net.Sockets.SocketException was unhandled ErrorCode=10040 HResult=-2147467259 Message=A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself NativeErrorCode=10040 Source=System StackTrace: at System.Net.Sockets.Socket.SendTo(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint remoteEP) at System.Net.Sockets.Socket.SendTo(Byte[] buffer, Int32 size, SocketFlags socketFlags, EndPoint remoteEP) at qnet.svchost.sendattack(String ip, Int32 port) in C:\Users\User\OneDrive\Documents\Visual Studio 2013\Projects\qnet\qnet\svchost.cs:line 84 at qnet.svchost.Form1_Load(Object sender, EventArgs e) in C:\Users\User\OneDrive\Documents\Visual Studio 2013\Projects\qnet\qnet\svchost.cs:line 27 at System.Windows.Forms.Form.OnLoad(EventArgs e) at System.Windows.Forms.Form.OnCreateControl() at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) at System.Windows.Forms.Control.CreateControl() at System.Windows.Forms.Control.WmShowWindow(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ScrollableControl.WndProc(Message& m) at System.Windows.Forms.Form.WmShowWindow(Message& m) at System.Windows.Forms.Form.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) InnerException:

最佳答案

错误不言自明:您不能发送那么大的数据包。 UDP 数据包的理论最大大小约为 64KB,通过 Internet 安全发送且不分片的大小小于 1KB:What is the largest Safe UDP Packet Size on the Internet

你需要让事情变得更小。

关于C# UDP 发送缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31685865/

相关文章:

c# - 按钮点击事件的编码标准

c# - Database.SetInitializer 中的 DropCreateDatabaseIfModelChanges

javascript - Android上运行的Chrome App如何接收UDP广播包

c# - 无法通过链接服务器访问数据库

c# - DeleteSubKey UnauthorizedAccessException

java - ObjectInputStream 无法识别我的对象数据格式

C 客户端服务器与 <socket.h>

c - Windows 上多线程应用程序中非阻塞服务器/监听套接字的最佳方法?

Linux UDP 套接字 : select() is not notified?

c++ - 处理 tcp/udp 接收的最佳方式。