Exemple #1
0
        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");
            }
        }