c#如何建立UDP套接字连接

时间:2019-02-06 10:50:44

标签: c# sockets udp

未处理的异常:System.Net.Sockets.SocketException:所引用的对象类型不支持尝试的操作

我尝试将ip映射到V6相同的异常

namespace ConsoleApp1
{
    using System.Net;
    using System.Net.Sockets;
    using static Tools;

    class Program
    {

        static void Main(string[] args)
        {
            Send("Hello from Server");

            Socket socket = new Socket(GetRemote().AddressFamily, SocketType.Dgram, ProtocolType.Udp);

            socket.Bind(GetRemote());

            socket.Listen(10);
        }
    }

    static class Tools
    {
        private static readonly EndPoint _REMOTE = new IPEndPoint(Dns.GetHostEntry(Dns.GetHostName()).AddressList[0], 11039);

        public static void Send(string message)
        {
            Console.Out.Write(message + Console.Out.NewLine);
        }

        public static EndPoint GetRemote()
        {
            return _REMOTE;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

将套接字定义更改为此:

Socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

编辑:

使用@gpro所说的,问题出在监听上,您应该改用receivefrom:

这是一个如何使用良好的udp套接字连接的示例: https://gist.github.com/darkguy2008/413a6fea3a5b4e67e5e0d96f750088a9

答案 1 :(得分:2)

如果调试代码,则可以看到此问题发生在套接字中。Listen(10);呼叫。基本上,您不应该将Listen用于UDP连接。 您可以改用RecieveFrom函数。

请参见https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket?view=netframework-4.7.2