第一次机会例外

问题描述

| 我当时正在研究C#中的套接字,在设法编写了基本的两人聊天代码后,我决定继续进行多人聊天,该聊天具有服务器和X客户端。 现在,即使仅连接一个客户端,也会弹出一个问题。客户端连接后,服务器和客户端都会收到一条消息“另一个客户端已连接”或“已连接到服务器”。他们第二次单击“确定”,客户端程序崩溃,接着是服务器一个(我将在稍后处理断开连接,我想使其首先工作)。从标题中可以猜到,我唯一得到的是“第一次机会例外”,即使在谷歌搜索或阅读此书后,我也无法阻止它的到来,也无法理解为什么它会来。 这是调试器输出中的两行:   mscorlib.dll中发生类型为\'System.FormatException \'的第一次机会异常      程序“ [6808]聊天-sockets.vshost.exe:托管(v4.0.30319)\”已退出代码为0(0x0)。 尝试捕获此异常时,try-catch不起作用。正如我之前所说,该程序甚至在调试模式下也崩溃,没有显示任何错误。 这是代码: 客户端连接回调:
private void ClientConnectCallback(IAsyncResult res)
{
    serverSocket.EndConnect(res);
    MessageBox.Show(\"Server connected.\");
    serverSocket.BeginReceive(buffer,buffer.Length,SocketFlags.None,new AsyncCallback(ClientRecieveCallback),null);
}
buffer是一个局部变量,一个字节数组,大小为1000。serverSocket是一个套接字,我们在其上使用\'BeginConnect \'方法。 这是服务器接受客户端回调:
private void ServerAcceptCallback(IAsyncResult res)
{
    //Recieving the socket.
    Socket tempSocket = localHost.EndAccept(res);

    //Creating a new buffer for it.
    byte[] tempBuffer = new byte[1000];

    //Adding the socket to the array.
    Socket[] tempArray = clients;
    clients = new Socket[tempArray.Length + 1];
    Array.copy(tempArray,clients,tempArray.Length);
    clients[clients.Length - 1] = tempSocket;

    //Adding the buffer to the list.
    buffers.Add(tempBuffer);
    MessageBox.Show(\"Another client connected\");

    //Begin receive data.
    tempSocket.BeginReceive(tempBuffer,tempBuffer.Length,new AsyncCallback(ServerRecieveCallback),null);
    localHost.BeginAccept(new AsyncCallback(ServerAcceptCallback),null);
    numOfPpL++;
    ServerSend(\"~~~NumOfPpl:\" + numOfPpl);
}
localHost
一个套接字,我们将其绑定到端口和任何地址,然后将其称为\'Listen(0)\'。
tempBuffer
一个新的字节数组,我们创建该数组仅用作此连接的缓冲区。 “ 4”是一个套接字数组,包含服务器的客户端。 “ 5”是客户端缓冲区的列表。 numOfPpl是当前会话中的人数,通过使用文本“ ~~~ NumOfPpl:\”调用ServerSend,客户端将接收下一个人数作为人数而不是消息,并分别在其中更改电脑。 我希望我清楚自己,这是我在本网站上遇到的第一个问题。 实际上,即使是一条信息,也可以帮助我进一步自我发展(因为我现在无所适从),将大有帮助。     

解决方法

        您的套接字I / O回调中可能有一个异常,该异常不在您的
catch
块中。 在Visual Studio中,单击“调试”,“异常”,然后选中所有复选框,以告知Visual Studio在引发任何异常后立即进入调试器。