예제 #1
0
        public void StartServer()
        {
            if (modeNetwork == Mode.indeterminately)
            {
                try
                {
                    _listener = new TcpListener(IPAddress.Any, 15000);
                    _listener.Start();
                    _listener.BeginAcceptTcpClient(AcceptCallback, _listener);
                    modeNetwork = Mode.Host;

                    string    host = Dns.GetHostName();
                    IPAddress ip   = Dns.GetHostByName(host).AddressList[0].MapToIPv4();
                    globalState = $"Хост запущен. IP-адрес сервера: {ip.ToString()}";
                    SendText.BeginInvoke(globalState, null, null);
                }
                catch (Exception e)
                {
                    _listener   = null;
                    globalState = e.Message;
                    SendText.BeginInvoke(globalState, null, null);
                }
            }
            else
            {
                globalState = "Хост уже запущен";
            }
        }
예제 #2
0
 public void ConnectClient(string ipserver, string mode)
 {
     if (modeNetwork == Mode.indeterminately)
     {
         _node = new NodeData();
         _node.newNode.BeginConnect(IPAddress.Parse(ipserver), 15000, new AsyncCallback(ConnectCallback), _node);
         if (mode == "node")
         {
             modeNetwork    = Mode.Node;
             _node.typeNode = NodeData.TypeNode.NODE;
         }
         else
         {
             modeNetwork    = Mode.Client;
             _node.typeNode = NodeData.TypeNode.CLIENT;
         }
         SendText.BeginInvoke("Попытка подключения...", null, null);
     }
     else
     {
         globalState = "Ошибка при подключении";
         SendText.BeginInvoke(globalState, null, null);
     }
 }
예제 #3
0
        public void SendData()
        {
            MessageData si = new MessageData();

            if (modeNetwork == Mode.Node)
            {
                si.text = "nd_res";
            }

            if (String.IsNullOrEmpty(si.text) == true && String.IsNullOrEmpty(SendFileName) == true)
            {
                return;
            }

            if (SendFileName != null)
            {
                FileInfo fi = new FileInfo(SendFileName);
                if (fi.Exists == true)
                {
                    si.fileSize = (int)fi.Length;
                    si.fileName = fi.Name;

                    if (modeNetwork == Mode.Host || modeNetwork == Mode.Client)
                    {
                        if (fi.Extension == ".xml")
                        {
                            si.type = MessageData.TypeData.DATA;
                        }
                        if (fi.Extension == ".exe")
                        {
                            si.type = MessageData.TypeData.CODE;
                        }
                    }
                }
                fi = null;
            }

            MemoryStream  ms        = new MemoryStream();
            XmlSerializer formatter = new XmlSerializer(typeof(MessageData));

            formatter.Serialize(ms, si);
            ms.Position = 0;
            byte[] infobuffer = new byte[ms.Length];
            int    r          = ms.Read(infobuffer, 0, infobuffer.Length);

            ms.Close();

            byte[] header = GetHeader(infobuffer.Length);
            byte[] total  = new byte[header.Length + infobuffer.Length + si.fileSize];

            Buffer.BlockCopy(header, 0, total, 0, header.Length);
            Buffer.BlockCopy(infobuffer, 0, total, header.Length, infobuffer.Length);

            if (si.fileSize > 0)
            {
                FileStream fs = new FileStream(SendFileName, FileMode.Open, FileAccess.Read);
                fs.Read(total, header.Length + infobuffer.Length, si.fileSize);
                fs.Close();
                fs = null;
            }

            NetworkStream ns = _node.newNode.GetStream();

            if (modeNetwork == Mode.Host)
            {
                if (isFinal)
                {
                    ns = _client.newNode.GetStream();
                }
                else
                {
                    if (Global.nodes[count].countFiles != 2)
                    {
                        ns = Global.nodes[count].newNode.GetStream();
                        Global.nodes[count].countFiles++;
                    }
                    else
                    {
                        count++;
                        ns = Global.nodes[count].newNode.GetStream();
                        Global.nodes[count].countFiles++;
                    }
                }
            }

            ns.Write(total, 0, total.Length);

            if (modeNetwork == Mode.Host)
            {
                if (Global.nodes.IndexOf(Global.nodes.Find(x => x.countFiles == 2)) != -1)
                {
                    Global.nodes[Global.nodes.IndexOf(Global.nodes.Find(x => x.countFiles == 2))].isBusy = true;
                }
            }

            header       = null;
            infobuffer   = null;
            total        = null;
            SendFileName = null;
            GC.Collect();
            GC.WaitForPendingFinalizers();


            SendText.BeginInvoke("Данные отправлены", null, null);
            Global.flag = false;
        }