我已经做了一个简短的程序,用户输入计算机的IP地址,然后程序继续通过尝试连接到端口80来检查计算机是否在线(假设是if一台电脑打开,它连接到互联网)。套接字程序冻结
现在,问题是,每次我点击开始按钮它什么也不做,然后它崩溃。
下面的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace Online_Checker
{
public partial class Form1 : Form
{
int success;
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ipAddress.Text), 80);
while (true)
{
success = 1;
try { client.Connect(ep); }
catch { status.BackColor = Color.Red; status.Text = "OFFLINE"; success = 0; }
if (success == 1)
{
status.BackColor = Color.Red;
status.Text = "ONLINE";
client.Close();
}
Thread.Sleep(5000);
}
}
}
}
正如你可以看到我已经还送每个检查间隔5秒钟的延迟,以确保它不会崩溃。
那么问题在哪里呢?我该如何解决它?
当你说它发疯时,有什么错误? – Mark
你有没有发现任何异常? – OmniOwl
没有错误。我只要点击开始按钮,开始按钮就会冻结,整个表格会冻结。即使它在几秒钟后有时不会崩溃,它会进入“Not Responding”模式,但我无法在其中做任何事情。如您所见,我发现了套接字连接异常(检查计算机是否开启/关闭)。 – BlueRay101