-1
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) 

错误消息是 未处理套接字异常(远程主机强行关闭了现有连接)

4

3 回答 3

1

将代码包装在一个

try
{

}
catch(SocketException se)
{

}
catch(Exception ex)
{
}

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

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

于 2012-10-02T08:04:59.737 回答
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());
        }
    }

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

于 2012-10-02T08:05:50.750 回答
-1

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

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

看看它是怎么做的。

于 2012-10-02T08:03:15.683 回答