Программа UWP не работает так же, как Winforms - PullRequest
0 голосов
/ 24 февраля 2020

Недавно я начал писать программу для отправки файла из одной системы в другую с использованием протокола TCPClient и .Net.

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

Когда я изначально писал программу, я делал это с Winforms, и все работало идеально. С тех пор я пытался перенести все на UWP, но с тех пор у меня не было ничего, кроме проблем.

Мне удалось решить большинство проблем, но у меня возникла проблема, которую я, похоже, не мог решить. Похоже, что программа не принимает подключения TCP.

Если я отправляю из Winforms версии в UWP версию, это не получается, но при обратном выполнении (отправка из UWP в Winforms версию) все работает. Это также означает, что я не могу отправить от UWP до UWP версии.

Любой совет был бы блестящим, я прикрепил метод для стороны сервера и стороны клиента.

Спасибо!

private void btnAcceptConn_Tapped(object sender, TappedRoutedEventArgs e)
{
     try
     {

         string hostName = Dns.GetHostName();

         //gets the IP and port number from text boxes
         Int32 server_port = Int32.Parse(txtboxPortNumber.Text);
         IPAddress localAdd = IPAddress.Parse(txtboxServerIP.Text);

         //listen on the specific IP and port no
         TcpListener listener = new TcpListener(localAdd, server_port);


         Byte[] bytes = new Byte[256];

         byte[] fullarrays = new byte[0];

         listen = true;

         while (listen == true)
         {

             //write to log
             string LogMess = "Listening...";
             WriteToLog(LogMess);

             listener.Start();
             //incoming client connected
             TcpClient client = listener.AcceptTcpClient();

             string LogMessConn = "Connected!";
             // WriteToLog(LogMessConn);

             //gets incoming data through network stream
             NetworkStream nwStream = client.GetStream();


             int off = 0;
             Thread.Sleep(200);
             //loop to receive all the data sent by the client
             while (nwStream.DataAvailable)
             {
                 nwStream.Read(bytes, 0, bytes.Length);

                 Array.Resize(ref fullarrays, fullarrays.Length + bytes.Length);

                 Buffer.BlockCopy(bytes, 0, fullarrays, off, bytes.Length);
                 off = +fullarrays.Length;
             }

             CreateFile(fullarrays);

             string LossMessComplete = "Complete Transfer";
             WriteToLog(LossMessComplete);

             client.Close();
             listener.Stop();
             listen = false;
         }
     }
     catch (Exception)
     {
         /*lblError.Visible = true;
         lblErrorMSG.Visible = true;
         lblErrorMSG.Text = "Please check enterted details";*/
     }
}
private void btnSend_Data_Tapped(object sender, TappedRoutedEventArgs e)
{
     Int32 server_port = Int32.Parse(txtboxPortNumber.Text);

     string ServerIP = txtboxServerIP.Text;



     //puts the file into a bytes array. gets the filetosendpath from the file select button 

     Byte[] textToSend = filetobytes(filetosendpath);

     //creates a TCP client object at the IP and port number
     TcpClient client = new TcpClient(ServerIP, server_port);
     client.SendTimeout = 1600000;
     client.ReceiveTimeout = 1600000;
     NetworkStream nwStream = client.GetStream();



     //byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(textToSend);
     //var bytesToSend = textToSend;

     //send the text
     string LogMess = "Sending: " + textToSend;
     WriteToLog(LogMess);
     load_activitylog();
     nwStream.Write(textToSend, 0, textToSend.Length);
}

1 Ответ

0 голосов
/ 24 февраля 2020

У меня это сейчас работает. Я почти уверен, что это было связано с «возможностями» в Appxmanifest.

Я включил «Частные сети» и «Inte rnet (клиент и сервер)», и это, похоже, заставило его работать!

Спасибо за помощь

...