Итак, это меня немного смутило.Я не могу придумать более простую программу для написания и тестирования.Я инициализирую 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-Проверить, могу ли я пинговать удаленный хост (ОК, я могу проверить связь)
2-Проверить, есть ли какие-либо данные, доступные на сетевом интерфейсе(ОК использовал wireshark и видел входящие пакеты)
3-Проверьте, разрешено ли моему приложению проходить через брандмауэр (ОК Явно добавил мой exe для прохождения через брандмауэр Windows)
4-Отключить (удалить) любой брандмауэр или антивирусные программы(ОК)
Пока я не могу получить данные из моего приложения.В ходе дальнейшего расследования я выяснил, что можно отправлять данные (удаленный хост получает мои данные), но я никогда не могу их получить.