Я пытаюсь создать простое приложение TCP, которое отправит запрос на сервер и после этого получит файл PDF, который должен обработать и сохранить на ПК. Я уже провел некоторое исследование по этому вопросу, но все, что я придумаю, это либо программа, которая всегда слушает какой-то адрес и порт, чтобы он мог получить файл, либо программа, которая отправляет запрос, затем получает небольшой ответ, а не поток , На данный момент у меня есть следующий код:
private void button1_Click(object sender, EventArgs e)
{
string fileHash = hashLabel.Text;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
var listener = new TcpListener(localAddr, 11000);
listener.Start();
while (true)
{
using (var client = listener.AcceptTcpClient())
using (var stream = client.GetStream())
using (var output = File.Create("receivedFile.pdf"))
{
Console.WriteLine("Client connected. Starting to receive the file");
// read the file in chunks of 1KB
var buffer = new byte[1024];
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
}
}
private void sendRequest(string fileHash)
{
try
{
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Loopback, 11000);
Socket serverSender = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
try
{
serverSender.Connect(remoteEP);
Console.WriteLine("Socket connected to {0}", serverSender.RemoteEndPoint.ToString());
byte[] msg = Encoding.ASCII.GetBytes(fileHash);
int bytesSent = serverSender.Send(msg);
serverSender.Shutdown(SocketShutdown.Both);
serverSender.Close();
}
catch (ArgumentNullException ane)
{
Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
}
catch (SocketException se)
{
Console.WriteLine("SocketException : {0}", se.ToString());
}
catch (Exception ex2)
{
Console.WriteLine("Unexpected exception : {0}", ex2.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
Таким образом, мой код должен сначала отправить хэш на сервер, когда я нажимаю кнопку, а затем получить файл в ответ. Я пытаюсь как-то объединить метод button1_Click и метод sendRequest (), но я не нашел способа сделать это. Спасибо.