//异步通讯客户端与服务器通讯的函数
        /// <summary>
        /// 异步通讯客户端与服务器通讯的函数
        /// </summary>
        private void ClientReadDataFromServer() 
            {
            //int Return = 0;

            ClientSocket.SendBufferSize = 1024;
            ClientSocket.ReceiveBufferSize = 1024;

            SendBuffer = new byte[ClientSocket.SendBufferSize];
            ReceiveBuffer = new byte[ClientSocket.ReceiveBufferSize];

            AutoTimer.Elapsed += new System.Timers.ElapsedEventHandler(AutoTimer_Elapsed);
            AutoTimer.Interval = 500;

            //使用定时器实现每隔一定时间间隔给服务器发一个消息
            System.Timers.Timer HeartBeatTimer = new System.Timers.Timer();
            HeartBeatTimer.Interval = AutoInterval;

            //与下面没有被注释掉的代码行作用相同
            //HeartBeatTimer.Elapsed += (o, a) =>
            HeartBeatTimer.Elapsed += (object Sender, System.Timers.ElapsedEventArgs e) =>
            {
                if (AutoSend == true)
                    {
                    if (ClientSocket != null) 
                        {
                        if (ClientSocket.Connected == true)
                        {
                        try
                            {
                            //TempClientSocket

                            for (int a = 0; a < AutoSendMsg.Length; a++)
                                {
                                if (AutoSendMsg[a] == "")
                                    {
                                    continue;
                                    }

                                if (ReceiveGB2312Code == true)
                                    {
                                    ClientSocket.Send(Encoding.GetEncoding("GB2312").GetBytes(FC.GetLocalIP4Address()
                                        + "    " + FC.GetLocalPort(ClientSocket) + "    "
                                        + AutoSendMsg[a] + "\r\n"));
                                    }
                                else
                                    {
                                    ClientSocket.Send(Encoding.UTF8.GetBytes(FC.GetLocalIP4Address()
                                        + "    " + FC.GetLocalPort(ClientSocket) + "    "
                                        + AutoSendMsg[a] + "\r\n"));
                                    }

                                FC.AddRichText(ref TempRichTextBox, "异步服务器 " + FC.GetLocalIP4Address() + "  "
                                    + FC.GetLocalPort(ClientSocket) + " 发送到客户端 " + FC.GetRemoteIP(ClientSocket) + "  "
                                        + FC.GetRemotePort(ClientSocket) + ",内容:" + SendMsg[a]);

                                }
                            }
                        catch (Exception ex)
                            {
                            ErrorMessage = ex.Message;
                            FC.AddRichText(ref TempRichTextBox, ex.Message);
                            }
                        }

                        //如果没有及时收到服务器的心跳包就断开当前连接
                        if (ReceiveMsg == "" && ConnectSuccess==true) 
                            {
                            ConnectSuccess = false;
                            ClientSocket.Close();
                            }
                        }
                    
                    else
                        {
                        HeartBeatTimer.Stop();
                        }
                    }

            };
            HeartBeatTimer.Enabled = true;

            //ClientSocket.UseOnlyOverlappedIO = true;

            //while (true)
            //    {
                while (StopThread == false)
                    {
                    try
                        {
                        if (ClientSocket != null)
                            {
                            if (ClientSocket.Connected == false)
                                {
                                //Connect to remote server
                                if (ConnectToServerByIP == false)
                                    {
                                    ClientSocket.Connect(ServerName, ServerPort);
                                    }
                                else
                                    {
                                    ClientSocket.Connect(ServerIP, ServerPort);
                                    }
                                }
                            }


                        if (ClientSocket != null)
                            {

                            if (ClientSocket.Connected == true)
                                {
                                //已经和服务器成功建立异步连接
                                ConnectSuccess = true;
                                
                                ClientSocket.BeginReceive(ReceiveBuffer, 0, ReceiveBuffer.Length,
                                    SocketFlags.None, new AsyncCallback(ReceiveMessage), ClientSocket);

                                //SendBuffer = Encoding.UTF8.GetBytes("Client..");
                                //ClientSocket.BeginSend(SendBuffer, 0, SendBuffer.Length, SocketFlags.None, null, null);

                                ////**************************
                                ////发送字符串到服务器
                                //if (SendMsg.Length != 0)
                                //    {
                                //    for (int a = 0; a < SendMsg.Length; a++)
                                //        {
                                //        if (SendMsg[a] == "") 
                                //            {
                                //            continue;
                                //            }
                                //        if (ReceiveGB2312Code == false)
                                //            {
                                //            SendBuffer = Encoding.UTF8.GetBytes(SendMsg[a]);
                                //            ClientSocket.BeginSend(SendBuffer, 0, SendBuffer.Length, SocketFlags.None, null, null);
                                //            }
                                //        else
                                //            {
                                //            SendBuffer = Encoding.GetEncoding("GB2312").GetBytes(SendMsg[a]);
                                //            ClientSocket.BeginSend(SendBuffer, 0, SendBuffer.Length, SocketFlags.None, null, null);
                                //            }
                                //        SendMsg[a] = "";
                                //        }
                                //    }
                                ////**************************
                                ////因为如果此时发送数据给服务器,就出现服务器收不到正确数量的内容
                                ////故加一个发送忙的标志SendBusy
                                //do
                                //    {
                                //    ;
                                //    }
                                //while (SendBusy == true);

                                //**************************

                                //if (SendMsg != "") 
                                //    {
                                //    if (ReceiveGB2312Code == false)
                                //        {
                                //        SendBuffer = Encoding.UTF8.GetBytes(SendMsg);
                                //        ClientSocket.BeginSend(SendBuffer, 0, SendBuffer.Length, SocketFlags.None, null, null);
                                //        }
                                //    else
                                //        {
                                //        SendBuffer = Encoding.GetEncoding("GB2312").GetBytes(SendMsg);
                                //        ClientSocket.BeginSend(SendBuffer, 0, SendBuffer.Length, SocketFlags.None, null, null);
                                //        }
                                //    SendMsg = "";
                                //    }

                                //if (TempStr.Length != 0 && TempStr != "") 
                                //    {
                                //    FC.AddRichText(ref TempRichTextBox, "客户端从本地端口 " + FC.GetLocalPort(ClientSocket)
                                //    + " 从服务器 " + FC.GetRemoteIP(ClientSocket) + " 的端口: "
                                //    + FC.GetRemotePort(ClientSocket) + ",收到文本内容:" + TempStr);
                                //    TempStr = "";
                                //    }
                                }
                            //else 
                            //    {
                            //    //ClientSocket.BeginSend(
                            //    ClientSocket = null;
                            //    }
                            }
                        //else 
                        //    {
                        //    ClientSocket = new Socket(AddressFamily.InterNetwork,
                        //    SocketType.Stream, ProtocolType.Tcp);
                        //    //ClientSocket.Close();
                        //    }
                        }
                    catch (Exception ex)
                        {
                        ErrorMessage = ex.Message;
                        //FC.AddRichText(ref TempRichTextBox, ex.Message);

                        if (ClientSocket != null)//  (TempSocket != null)
                            {
                            if (ConnectSuccess == true && ClientSocket.Connected == false)// TempSocket.Connected==false)
                                {
                                //出现异常后重新与服务器建立连接
                                ClientSocket = null;
                                ClientSocket = new Socket(AddressFamily.InterNetwork,
                                    SocketType.Stream, ProtocolType.Tcp);
                                ConnectSuccess = false;
                                }
                            }
                        }
                    }
                //}
            }
        //初始化服务器Socket
        /// <summary>
        /// 初始化服务器Socket
        /// </summary>
        private void InitalSocet() 
            {
            try
                {

                AutoTimer.Elapsed += new System.Timers.ElapsedEventHandler(AutoTimer_Elapsed);
                AutoTimer.Enabled = true;
                AutoTimer.Start();

                //创建一个新的Socket,基于TCP的Stream Socket(流式套接字)
                ServerSocket = new Socket(AddressFamily.InterNetwork,
                    SocketType.Stream, ProtocolType.Tcp);

                //将该socket绑定到主机上面的某个端口
                ServerSocket.Bind(new IPEndPoint(IPAddress.Any, ListenPort));

                //启动监听并设置监听队列长度
                ServerSocket.Listen(ListenQty);

                ErrorMessage = "异步 Server is listening the client now...";
                FC.AddRichText(ref TempRichTextBox, "异步 Server is listening the client now...");

                //开始接受客户端连接请求
                ServerSocket.BeginAccept(new AsyncCallback(ServerAcceptClient), ServerSocket);

                }
            catch (Exception ex) 
                {
                ErrorMessage = ex.Message;
                //FC.AddRichText(ref TempRichTextBox, ex.Message);
                }
            }
Example #3
0
        private void ChangePos()
        {
            int x = 1, y = 0;

            x = button2.Left;
            y = button2.Top;
            Control xx = button2;

            bool reset = false;

            while (true)
            {
                try
                {
                    FC.ChangeControlText(ref xx, Delay1.PassedTime.ToString());

                    //FC.ChangeControlEnableStatus(ref xx, Delay1.Wait(2.5));//Delay1.Wait(2.5,true));

                    if (Temps == false && Delay1.Wait(2.5, true))//Delay1.Wait(2.5))
                    {
                        FC.AddRichText(ref richTextBox1, Delay1.PassedTime.ToString());
                        //Delay1.Reset();
                        //Delay1.Start();
                        reset = true;
                        Temps = true;
                    }

                    if (reset == true)
                    {
                        //Delay1.Reset();
                        Delay1.Start();
                        reset = false;
                        Temps = false;
                    }

                    //xx = button2;
                    //FC.ChangeControlPosition(ref xx, x, y);
                    //System.Threading.Thread.Sleep(1000);
                    //x += 11;
                    //y += 10;

                    //if (x / 10 % 2 == 1)
                    //    {
                    //    FC.ChangeControlBackColor(ref xx, Color.Red);
                    //    FC.ChangeControlEnableStatus(ref xx, true);
                    //    FC.ChangeControlForeColor(ref xx, Color.Yellow);
                    //    FC.ChangeControlText(ref xx, x.ToString());
                    //    }
                    //else
                    //    {
                    //    FC.ChangeControlBackColor(ref xx, Color.Green);
                    //    FC.ChangeControlEnableStatus(ref xx, false);
                    //    FC.ChangeControlForeColor(ref xx, Color.Blue);
                    //    FC.ChangeControlText(ref xx, y.ToString());
                    //    }

                    //xx = button3;
                    //FC.ChangeControlPosition(ref xx, x+20, y+30);
                    //if (x / 10 % 2 == 1)
                    //    {
                    //    FC.ChangeControlBackColor(ref xx, Color.Red);
                    //    FC.ChangeControlEnableStatus(ref xx, true);
                    //    FC.ChangeControlForeColor(ref xx, Color.Yellow);
                    //    FC.ChangeControlText(ref xx, x.ToString());
                    //    }
                    //else
                    //    {
                    //    FC.ChangeControlBackColor(ref xx, Color.Green);
                    //    FC.ChangeControlEnableStatus(ref xx, false);
                    //    FC.ChangeControlForeColor(ref xx, Color.Blue);
                    //    FC.ChangeControlText(ref xx, y.ToString());
                    //    }
                }
                catch (Exception ex)
                {
                    FC.AddRichText(ref richTextBox1, ex.Message);
                }
            }
        }
Example #4
0
        private void button2_Click(object sender, EventArgs e)
        {
            //System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;

            ww.ClearRichTextBoxContents(ref richTextBox1);
            //ww.AddRichText(ref richTextBox1, "a\r");



            ww.ChangeButtonEnableStatus(ref button1, false);

            var xx = new System.Timers.Timer();

            xx.Interval = 200;
            xx.Enabled  = false;
            xx.Elapsed += (o, a) =>
            {
                //zz.AddText(ref richTextBox1, "a\r\n");

                ww.ClearRichTextBoxContents(ref richTextBox1);

                //ww.ChangeEnableStatus(Form1,ref button1, false);

                ww.AddRichText(ref richTextBox1, "  a\r\n");


                //xx.SynchronizingObject = richTextBox1;
                //richTextBox1.AppendText(DateTime.Now + "   a\r\n");
            };



            //System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;

            //System.Threading.Timer xx = new System.Threading.Timer();
            //StartTimer(200);

            //public static void Main()
            //{
            //    // Create an instance of the Example class, and start two
            //    // timers.
            //    Example ex = new Example();
            //    ex.StartTimer(2000);
            //    ex.StartTimer(1000);

            //    Console.WriteLine("Press Enter to end the program.");
            //    Console.ReadLine();
            //}

            //public void StartTimer(int dueTime)
            //{
            //    Timer t = new Timer(new TimerCallback(TimerProc));
            //    t.Change(dueTime, 0);
            //}

            //private void TimerProc(object state)
            //{
            //    // The state object is the Timer object.
            //    Timer t = (Timer) state;
            //    t.Dispose();
            //    Console.WriteLine("The timer callback executes.");
            //}
        }