C# 调用Socket.Accept()返回类型初始化错误
我正在创建一个简单的网络应用程序,它允许一个客户端连接到主机,并在while循环中在两者之间发送和接收数据。我的大部分代码都是从MSDN获得的,但是当我运行它时,就在调用Socket.Accept()之后,表单停止运行并引发TypeInitialization错误。这是我的密码: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
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-您可以添加异常的堆栈跟踪,即完整的异常消息吗?这将有助于理解这个问题。