MainThread.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using AggregatorFinal.DataAggregator;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. namespace AggregatorFinal.Rec
  12. {
  13. class MainThread
  14. {
  15. Thread _thread;
  16. String ip;
  17. string port;
  18. public MainThread(String ip, string port)
  19. {
  20. this.port = port;
  21. this.ip = ip;
  22. _thread = new Thread(threadFunction);
  23. _thread.Start();
  24. }
  25. private void threadFunction()
  26. {
  27. char[] splitter = { '#' };
  28. UDP_Receiver _udp_Receiver = new UDP_Receiver(port);
  29. while (true)
  30. {
  31. string text = _udp_Receiver.receiveMessage();
  32. String[] parts2 = text.Split(splitter, StringSplitOptions.None);
  33. String senderIp = parts2[0];
  34. String senderPort = parts2[1];
  35. String fileName = parts2[2];
  36. DirectoryInfo di = Directory.CreateDirectory(Aggregator.resultFolder + "/" + senderIp);
  37. int freePort = FreeTcpPort();
  38. new RecThread(di.FullName + "/" + fileName, freePort);
  39. Console.WriteLine("Rec file: " + fileName + ", from: " + senderIp);
  40. UDP_Sender.forwardMessage(senderIp, senderPort, "RequestFile" + "#" + fileName + ":" + ip + ":" + freePort);
  41. }
  42. }
  43. static int FreeTcpPort()
  44. {
  45. TcpListener l = new TcpListener(IPAddress.Loopback, 0);
  46. l.Start();
  47. int port = ((IPEndPoint)l.LocalEndpoint).Port;
  48. l.Stop();
  49. return port;
  50. }
  51. }
  52. }