//异步通讯客户端与服务器通讯的函数 /// <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); } }
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); } } }
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."); //} }