2013-11-30 3 views
0

У меня есть код C#, который соединяется с адресом localhost ip address 127.0.0.1 и номером порта. 5939. Соединение происходит отлично, но оно не получает никаких данных. Я хочу, чтобы он получал данные и сохранял их в текстовом файле на моем локальном компьютере.Сокет не принимает данные с localhost

ли он не принимает данные, потому что он находится на локальном хосте и на той же машине, или есть ошибка в моем коде ..

Вот мой код ..

  byte[] data = new byte[1024]; 
     string input, stringData; 
     String ip = "127.0.0.1"; 
     Int32 port = 5939; 
     string path = "D://ipdata.text"; 

      if (File.Exists("D://ipsettings.txt")) 
      { 
       File.Delete("D://ipsettings.txt"); 
      } 


      IPAddress ipad = IPAddress.Parse(ip); 
      IPEndPoint ipend = new IPEndPoint(ipad, port); 
      Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      try 
      { 
       sock.Connect(ipend); 

      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
      try 
      { 
       int recv = sock.Receive(data); 
       stringData = Encoding.ASCII.GetString(data, 0, recv); 
       while (true) 
       { 

        input = "Client here"; 
        sock.Send(Encoding.ASCII.GetBytes(input)); 
        data = new byte[1024]; 
        recv = sock.Receive(data); 
        stringData = Encoding.ASCII.GetString(data, 0, recv); 

        string df = ""; 
        try 
        { 
         System.IO.FileInfo fi = new System.IO.FileInfo(path); 

Моя программа не выполнение после этой строки ..

int recv = sock.Receive(data); 

Пожалуйста, помогите мне выбраться из этой ситуации. Спасибо заранее.

+0

Ваш сервер отправляет данные, как только инициируется соединение (как из вашего кода), либо требуется, чтобы некоторые команды были отправлены на него? – bansi

+0

также добавляет тайм-аут к сокету, поэтому он не будет ждать бесконечно. – bansi

+0

@bansi Я не знаю, сэр, потому что это локальный хост моей собственной машины. – Adi

ответ

2

Вам необходимо прочитать данные, пока не будет предоставлена ​​функция Receive.

использовать while цикл, чтобы определить, доступен ли data или нет.

 int recv=0; 
     byte[] data = new byte[1024]; 

     StringBuilder sb= new StringBuilder(); 
     while ((recv=sock.Receive(data)) > 0) 
     { 
      sb.Append(Encoding.ASCII.GetString(data, 0, recv)); 
     } 
+0

сэр, я сделал это в своем коде .. пожалуйста, см. Мое обновленное сообщение. – Adi

+0

@Adi: вы используете цикл while после чтения данных. но вам нужно использовать пока, чтобы определить, пока данные не будут доступны. Проверьте мой ответ и дайте понять. –

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