C# 调用Socket.Accept()返回类型初始化错误

C# 调用Socket.Accept()返回类型初始化错误,c#,winforms,sockets,network-programming,typeinitializeexception,C#,Winforms,Sockets,Network Programming,Typeinitializeexception,我正在创建一个简单的网络应用程序,它允许一个客户端连接到主机,并在while循环中在两者之间发送和接收数据。我的大部分代码都是从MSDN获得的,但是当我运行它时,就在调用Socket.Accept()之后,表单停止运行并引发TypeInitialization错误。这是我的密码: public static void StartListening() { // Data buffer for incoming data. byte[] bytes = ne

我正在创建一个简单的网络应用程序,它允许一个客户端连接到主机,并在while循环中在两者之间发送和接收数据。我的大部分代码都是从MSDN获得的,但是当我运行它时,就在调用Socket.Accept()之后,表单停止运行并引发TypeInitialization错误。这是我的密码:

public static void StartListening()
    {
        // Data buffer for incoming data.
        byte[] bytes = new byte[1024];
        IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, HostingPort);

        // Create a TCP/IP socket.
        Socket listener = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);

        // Bind the socket to the local endpoint and 
        // listen for incoming connections.
        try
        {
            listener.Bind(localEndPoint);
            listener.Listen(10);
            Socket handler = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            // Start listening for connections.
            while (true)
            {
                Console.WriteLine("Waiting for a connection...");
                // Program is suspended while waiting for an incoming connection.
                handler = listener.Accept();

                // An incoming connection needs to be processed.
                while (true)
                {
                    bytes = new byte[1024];
                    int bytesRec = handler.Receive(bytes);
                    byte[] trimmedData = new byte[bytesRec];
                    Array.Copy(bytes, trimmedData, bytesRec);
                    string data = Encoding.ASCII.GetString(bytes));

                    // Show the data on the console.
                    Console.WriteLine("Text received : {0}", data);

                    // Echo the data back to the client.
                    byte[] msg = Encoding.ASCII.GetBytes(foo);

                    handler.Send(msg);
                }

                handler.Shutdown(SocketShutdown.Both);
                handler.Close();
            }

        }

        catch (Exception) { }
    } 

这是控制一切的功能。你能找到错误吗,或者如果有一个行之有效的方法来完成这个,我可以从头开始。提前谢谢。

您使用像
Socket
这样的低级类,而不是像从中获取
TcpClient
这样的高级抽象,有什么特别的原因吗?我不太擅长联网,所以如果您有一个我如何使用TcpClient的例子,我很乐意改变它。网上有很多教程。另外,如果您不需要专门使用套接字,我强烈建议您在两个程序之间的网络通信中使用类似的方法,这样您就不太可能因为设计了错误的网络协议而在程序中出错。谢谢,但在我的项目的最后阶段,我不能更改为WPF。不过,我将寻找一些Tcp教程。@Akinni-您可以添加异常的堆栈跟踪,即完整的异常消息吗?这将有助于理解这个问题。您使用诸如
Socket
这样的低级类,而不是从中获取
TcpClient
这样的高级抽象,有什么具体原因吗?我不太擅长联网,所以如果您有一个例子说明我如何使用TcpClient,我很乐意改变它。网上有很多教程。另外,如果您不需要专门使用套接字,我强烈建议您在两个程序之间的网络通信中使用类似的方法,这样您就不太可能因为设计了错误的网络协议而在程序中出错。谢谢,但在我的项目的最后阶段,我不能更改为WPF。不过,我将寻找一些Tcp教程。@Akinni-您可以添加异常的堆栈跟踪,即完整的异常消息吗?这将有助于理解这个问题。