private void WorkWithClient() { try { Client.Client.ReceiveTimeout = 7000; Client.Client.SendTimeout = 7000; string firstMessage = myStream.ReadString(); myStream.SendNEXT(); if (firstMessage != "<isClient>") { throw new Exception($"first message = {firstMessage}, unknown client try to connect"); } string fileName = myStream.ReadString(); if (!ListHolder.Files.Exists(c => c.FileName == fileName)) { myStream.Write("<unknownFile>"); return; } else { myStream.Write("<fileFound>"); } udpListenerIP = IPBuilder.GetIP(); udpListener = new UdpClient(udpListenerIP); string udpClientAddress = myStream.ReadString(); myStream.Write(udpListenerIP.Address.ToString()); int udpClientPort = myStream.ReadInt(); myStream.Write(udpListenerIP.Port); IPEndPoint udpClientIP = IPBuilder.GetIP(udpClientAddress, udpClientPort); SendFile(fileName, udpClientIP); udpListener.Close(); } catch (ThreadAbortException) { } catch (Exception e) { MyDispatcher.Dispatcher.Invoke(() => { MessageBox.Show(e.Message, "File server error: when initial sending file"); }); } }
private void ConnectToMainServer(IPEndPoint serverIP) { try { client = new TcpClient(ipAsClient); client.Connect(serverIP); client.Client.ReceiveTimeout = 7000; client.Client.SendTimeout = 7000; myStream = new MyStreamIO(client.GetStream()); myStream.Write("<isFileServer>"); myStream.GetNEXT(); while (true) { int numberOfFile = ListHolder.Files.Count; myStream.Write("<sendFilesInfo>"); myStream.GetNEXT(); myStream.Write(numberOfFile); myStream.GetNEXT(); foreach (MyFile file in ListHolder.Files) { myStream.Write(file.FileName); myStream.GetNEXT(); myStream.Write(file.FileSize); myStream.GetNEXT(); myStream.Write(ipAsServer.Address.ToString()); myStream.GetNEXT(); myStream.Write(ipAsServer.Port); myStream.GetNEXT(); } Thread.Sleep(5000); } } catch (ThreadAbortException) { } catch (Exception e) { MessageBox.Show(e.Message, "File server error: when working with main server"); } }