Недавно я начал писать программу для отправки файла из одной системы в другую с использованием протокола 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);
}