处理Socket编程中的异常

时间:2012-10-02 07:54:18

标签: c# exception-handling

public partial class Form1 : Form
{
    private void button1_Click(object sender, EventArgs e)
    {
        String text = textBox1.Text;
        UdpClient udpc = new UdpClient(text,8899);
        IPEndPoint ep = null;

        while (true)
        {
            MessageBox.Show("Name: ");
            string name = "Connected";
            if (name == "") break;
            byte[] sdata = Encoding.ASCII.GetBytes(name);
            udpc.Send(sdata, sdata.Length);

            if (udpc.Receive(ref ep)==null)
            {
               MessageBox.Show("Host not found");               
            }
            else
            {                
                byte[] rdata = udpc.Receive(ref ep);
                string job = Encoding.ASCII.GetString(rdata);
                MessageBox.Show(job);
            }               
        }
    }

我的远程计算机未连接时收到错误消息。使用此代码即可获得错误。

if (udpc.Receive(ref ep)==null) 

错误消息套接字异常未被隐藏(现有连接被远程主机强行关闭)

3 个答案:

答案 0 :(得分:1)

将代码包装在

try
{

}
catch(SocketException se)
{

}
catch(Exception ex)
{
}

从这里开始获取有关SocketException的文档

http://msdn.microsoft.com/en-us/library/system.net.sockets.socketexception.aspx

答案 1 :(得分:1)

如果未处理异常,则处理异常:

    while (true)
    {
        MessageBox.Show("Name: ");
        string name = "Connected";
        if (name == "") break;
        byte[] sdata = Encoding.ASCII.GetBytes(name);

        try{
            udpc.Send(sdata, sdata.Length);
            byte[] rdata = udpc.Receive(ref ep);
            string job = Encoding.ASCII.GetString(rdata);
            MessageBox.Show(job);
        }
        catch(Exception ex)
        {
            MessaageBox.show(ex.toString());
        }
    }

当程序访问外部资源(dbs,队列,文件系统,http连接,udp套接字等)时,始终建议使用try...catch块。

答案 2 :(得分:-1)

您可以将无限循环包装在try catch块中。

try
{
 while(true)
 {
   //your code
 } 
}
catch(Exception exception)
{
   //show exception.Message; 
}
finally{ //clean up}

看看how它已经完成。