所以,这让我感到困惑了一段时间。我想不出一个更简单的程序来编写和测试。我初始化UdpClient
并在单独的线程上调用Receive
方法。以下是完整的代码:
UdpClient client = new UdpClient(1414);
byte[] data = new byte[320];
IPEndPoint localpt = new IPEndPoint(IPAddress.Any,0);
const string START_COMMAND = "START";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
client.Connect("192.168.1.12",33051);
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
try
{
while (client.Available > 0)
{
data=client.Receive(ref localpt);
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
}
}
private void button1_Click(object sender, EventArgs e)
{
byte[] START_BYTES = Encoding.ASCII.GetBytes(START_COMMAND);
client.Send(START_BYTES, START_BYTES.Length);
}
在while (client.Available > 0)
上设置断点后,我注意到client.Available始终为零。
我尝试过的事情:
1-检查我是否可以ping通远程主机(好的,我可以ping通)
2-检查网络接口上是否有可用数据(确定使用过的线缆,并看到传入的数据包)
3-检查我的应用程序是否被允许通过防火墙(确定明确添加了我的exe来通过Windows防火墙)
4-禁用(卸载)任何防火墙或防病毒程序(确定)
但是我无法从应用程序内部接收任何数据。通过进一步的调查,我发现可以发送数据(远程主机接收我的数据),但是我永远也收不到。