2013-11-19 4 views
0

Я написал код, приведенный ниже, для сбора данных с Panasonic PBX (KX-TDE 100/200) и записи его в файл. Когда я пытаюсь запустить приведенный ниже код, он показывает «не отвечает» в диспетчере задач.
Также я попытался отладить там, где может быть проблема. Строкаданные захвата с Panasonic PBX с использованием C#

Розетка socket = прослушиватель.Accept(); будет удаляться при отладке, после чего отобразится сообщение «Не реагировать».

УАТС подключается к локальной сети в моей компании. Какие-либо конфигурации необходимо выполнять в локальной сети?

Я попробовал тот же код для IP: 127.0.0.1, чтобы отправить строку в клиентское приложение, и это сработало. Но когда я попытался извлечь данные из УАТС, он не работает.

Провод LAN из моей АТС подключен к коммутатору.

Пожалуйста, дайте мне знать, какую ошибку я делаю. Также укажите мне хорошие образцы при захвате данных с УАТС с помощью C#.

 private void btnstartserver_Click(object sender, EventArgs e) 
    { 

     int portno = Convert.ToInt32(txtportnum.Text); 
     byte[] receivedBytes = new byte[1024]; 
     IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName()); 
     IPAddress ipAddress = ipHost.AddressList[0]; 
     IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, portno);//2112 
     txtboxstatus.Text = "Creating socket object..."; 

     Socket listener = new Socket(AddressFamily.InterNetworkV6, 
            SocketType.Stream, 
            ProtocolType.Tcp); 

     listener.Bind(ipEndPoint); 
     listener.Listen(10); 
     txtboxstatus.AppendText("Listening on " + ipHost.AddressList[0].ToString() + ":" + portno.ToString() + "\r\n"); 


     Socket socket = listener.Accept(); 

     txtboxstatus.AppendText ("\n Connected with ..." + ipEndPoint.Port); 

     string receivedvalue = string.Empty; 


     receivedvalue = ReadMessage(socket); 
     txtboxstatus.AppendText("\n Message read.....trying to write to the file..."); 
     //writing the received value from client into a file. 
     try 
     { 
      FileStream fs = new FileStream("E:/Demo/IpData/Call.txt", FileMode.Create); 
      StreamWriter sw = new StreamWriter(fs); 
      sw.Write(receivedvalue); 
      sw.Dispose(); 
      fs.Dispose(); 
     } 
     catch (Exception ex) 
     { 
      txtclient.AppendText(ex.Message); 
     } 
    } 

Уточнение к этому вопросу.
Я написал новый код для подключения к PBX. С новым кодом я смог подключиться к PBX. См. Ниже.

private void btnTx_Click(object sender, EventArgs e) 
    { 
     byte[] receivedBytes = new byte[1024]; 

     int portno = Convert.ToInt32(txtportnum.Text); 
     IPHostEntry ipHost = Dns.GetHostByName("192.168.x.yyy"); 
     IPAddress ipAddress = ipHost.AddressList[0]; 
     IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, portno); 
      txtstatus.Text = "Creating socket object..."; 

     Socket send_soc = new Socket(AddressFamily.InterNetwork, 
            SocketType.Stream, 
            ProtocolType.Tcp); 

     send_soc.Connect(ipEndPoint); 
     txtstatus.AppendText("\nSuccessfully connected to:" + "\t" + send_soc.RemoteEndPoint); 
     txtstatus.AppendText("\nConnecting via :" + "\t" + send_soc.LocalEndPoint); 

     string sendingMessage = "abcde"; 





     SendMessage(send_soc, sendingMessage); 

     int totalBytesReceived = send_soc.Receive(receivedBytes); 

     string dff = ""; 
     string s = System.Text.ASCIIEncoding.ASCII.GetString(receivedBytes, 0, totalBytesReceived); 

     txtRx.AppendText(s); 
     send_soc.Shutdown(SocketShutdown.Both); 
     send_soc.Close(); 
     try 
     { 
      FileStream dr = new FileStream("E:/Demo/IpData/Call.txt", FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite); 
      StreamReader fg = new StreamReader(dr); 
      string df = fg.ReadToEnd(); 
      dff = df; 
      fg.Dispose(); 
      dr.Dispose(); 
     } 
     catch (Exception dfjdfs) 
     { 
      throw dfjdfs; 
     } 
     try 
     { 
      File.Delete("E:/Demo/IpData/Call.txt"); 
     } 
     catch (Exception jhu) 
     { 
      throw jhu; 
     } 
     try 
     { 
      FileStream cd = new FileStream("E:/Demo/IpData/Call.txt", FileMode.Create); 
      StreamWriter cdf = new StreamWriter(cd); 
      cdf.Write(dff); 
      cdf.Write(s); 
      cdf.Dispose(); 
      cd.Dispose(); 
     } 
     catch (Exception hgy) 
     { 
      throw hgy; 
     } 

    } 

    static void SendMessage(Socket socket, string msg) 
    { 
     byte[] data = System.Text.ASCIIEncoding.ASCII.GetBytes(msg); 

     socket.Send(data); 
    } 

Но я не могу получить никаких данных от АТС, кроме «-» плюс все, что я посылаю в примере «sendingMessage» variable.For если sendingMessage = «ABCDE», я буду получать -abcde

Также в документации описывается, как настроить поле PBX. Также, чтобы УАТС возвращала данные, нам необходимо отправить действительные учетные данные. Как отправить эти действительные учетные данные?

+0

Вы уверены, что вам не нужны действительные учетные данные для подключения к УАТС, многие из этих машин требуют учетных данных для взаимодействия с ним. –

+0

@JuanPabloGomez: - да, это необходимо, я просто узнал об этом. Итак, как я могу предоставить действительные учетные данные для подключения к УАТС. Любой образец или ссылка ???? – DotNetTide

+0

Извините за задержку, это зависит от каждой модели, вы должны прочитать инструкцию по УАТС. возможно, в разделе командной строки. Может быть, эта ссылка может помочь вам http://www.voicesonic.com/panasonic/manuals/KX-TDE_100_200_600/KXTDE_Programming_Manual-100-200-600.pdf –

ответ

0

Не выполняйте блокирующие вызовы (например, accept) в обработчике событий GUI.

Пропустите сервер или используйте asynch.

+0

Благодарим вас за ответ. Я попытался использовать async, но он все еще показывает «Не реагировать» при отладке. – DotNetTide

0

Вы должны ввести «SMDR» и ввести после «-» для перехода в режим smdr, затем ввести «PCCSMDR» в качестве пароля и ввести для общедоступных моделей Panasonic.