2015-03-27 3 views
0

Мне нужно проверить статус любых компьютеров в моей локальной сети. Но мой код не эффективен, потому что в нем очень длинный ответ. Я пробовал темы, эта проверка работает на фоне. Но мне нужна более быстрая проверка. Моя программа работает как клиент-сервер.Проверить статус на сервере с определенным портом

В моей основной программе мне нужно написать доступные компьютеры до listbox. Пример:

Мой главный клиент хочет получить компьютеры в локальной сети. Компьютеры имеют сервер работает на порту . Но, когда я хочу найти доступные компьютеры, в этом слишком длинный ответ.

Переменные

string message = "!"; 
string temp = ""; 
public static string list = ""; 

Checker доступные компьютеры:

public static void checker() 
    { 
     string IP; 
     int statResp = 0; 

     for (int i = 1; i < 10; i++) 
     {    
      IP = "192.168.0." + i; 

      string msg = "!"; 

      try 
      { 
       Int32 port = 13000; 

       TcpClient client = new TcpClient(IP, port); 


       Byte[] data = System.Text.Encoding.ASCII.GetBytes(msg); 
       msg = "!"; 


       NetworkStream stream = client.GetStream(); 


       stream.Write(data, 0, data.Length); 

       data = new Byte[256]; 
       String responseData = String.Empty; 

       Int32 bytes = stream.Read(data, 0, data.Length); 
       responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); 
       if (responseData == " " || responseData == "!") 
       { 
        statResp = 1; // response is correct server runs 
       } 
       stream.Close(); 
       client.Close(); 
      } 
      catch (ArgumentNullException) 
      { 
       continue; // continue with next iteration 
      } 
      catch (SocketException) 
      { 
       continue; // continue with next iteration 
      } 
      if (statResp == 1) 
      { 
       list = IP; // list is variable 
      } 
     } 
    } 

ТАЙМЕР - Проверка данных в списке переменная

private void timer2_Tick(object sender, EventArgs e) 
    { 
     if (temp != list) 
     { 
      listBox1.Items.Add(list); 
      temp = list; 
     } 
    } 

Если список переменная имеет то же значение, что и у temp переменная, старый адрес не будет добавлен в список.

+0

Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

0

Я решил свою проблему. Когда я отправлю пакет широковещательной рассылки UDP в UDP-прослушиватель (клиент), IP-адрес отправителя будет передан для отправки нового пакета последнему отправителю. Оригинальный отправитель (сервер) получит новый IP-адрес от удаленного клиента.

Смежные вопросы