C# 套接字编程中的异常处理
当我的远程计算机未连接时,我收到一条错误消息。用这段代码我得到了错误C# 套接字编程中的异常处理,c#,exception-handling,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 = nu
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);
}
}
}
错误消息是,套接字异常未受影响。(远程主机强制关闭了现有连接)您可以将无限循环包装在try-catch块中
if (udpc.Receive(ref ep)==null)
看看它是否完成了。将代码包装在
try
{
while(true)
{
//your code
}
}
catch(Exception exception)
{
//show exception.Message;
}
finally{ //clean up}
并从这里开始获取有关SocketException的文档
如果异常未处理,请处理异常:
try
{
}
catch(SocketException se)
{
}
catch(Exception ex)
{
}
当程序访问外部资源(dbs、队列、文件系统、http连接、udp套接字等)时,始终建议使用
try…catch
块。我假设您想知道为什么会发生这种情况,以及如何防止这种情况?你需要把问题弄清楚。我知道这很老了,但是用这种方法捕获所有异常可能会吞没你没有真正处理的异常。这将导致无提示故障和难以调试代码。总是显式地捕捉异常。@bodangly虽然我大体上同意,但我不认为它会导致无声的失败。您仍然可以告诉或记录引发的异常,并重新引发该异常。
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());
}
}