示例#1
0
        private void monitor(object o)
        {
            Socket listening = o as Socket;

            while (true)
            {
                try
                {
                    // 用内部connect套接字,传用server套接字
                    Socket   connect  = listening.Accept();
                    EndPoint clientIP = connect.RemoteEndPoint;
                    Form1.f1.addItems(clientIP.ToString());
                    Form1.f1.appendText(clientIP.ToString() + "已连接\r\n");

                    //flag flag = new flag();
                    //flag.socket = connect;
                    //  client_list.Add(clientIP.ToString(), flag);

                    //  _asynReceiveDate.BeginInvoke(connect, new AsyncCallback(receiveDate), connect);

                    //  connect.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(receiveMessage.OnReceiveCallback), connect);
                    StartKeepAlive StartKeepAlive = new StartKeepAlive(clientIP.ToString(), buffer);
                    StartKeepAlive._StartKeepAlive(connect);
                }
                catch { }
            }
        }
        public void OnReceiveCallback(IAsyncResult ar)
        {
            // timerClass statusChecker = new timerClass(3);
            try
            {
                Socket socket = ar.AsyncState as Socket;

                //方法参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.endreceive.aspx
                int length = socket.EndReceive(ar);
                if (length > 0)
                {
                    timer.Dispose();

                    //读取出来消息内容
                    string message = Encoding.UTF8.GetString(buffer, 0, length);
                    //    Form1.f1.appendText(message + "\r\n");

                    //   serialPort.WriteLine(message);
                    // 解析JOSN,如果不是JOSN 数据就直接输出数据
                    //if (josn.clientConfig(message) != null && message.Length > 1)
                    //{
                    //    config config = josn.clientConfig(message);
                    //    Form1.f1.appendText(message + "\r\n");
                    //    if (config.heartBeat == "0x0F")
                    //    {
                    //        Form1.f1.appendText(message + "\r\n");
                    //        timer.Dispose();
                    //    }
                    //    else if (config.operationCode == "onLine")               //判断上线操作
                    //    {
                    //        List<string> flaglist = new List<string>();
                    //        string configToJosn = null;
                    //        Form1.f1.appendText(socket.RemoteEndPoint.ToString());
                    //        socket_flag = config.flag;
                    //        if (server.clientFlag_list.Count == 0)
                    //        {
                    //            Form1.f1.addListbox_flag(config.flag);

                    //            //添加flag到LIST
                    //            flaglist.Add(socket_flag);
                    //            server.clientFlag_list.Add(config.flag, socket);   //将Flag 和 client 的套接定对应
                    //            config = config.addconfig(flaglist, socket_flag, null, null, "onLine", null);
                    //            configToJosn = Newtonsoft.Json.JsonConvert.SerializeObject(config);   //转JOSN
                    //            server.allsend(configToJosn);
                    //        }
                    //        else
                    //        {
                    //            bool repetitive_key=false;
                    //            foreach (var item in server.clientFlag_list.Keys)
                    //            {

                    //                if (item == socket_flag)
                    //                {
                    //                     repetitive_key = true ;

                    //                    break;
                    //                    //Form1.f1.addListbox_flag(config.flag);
                    //                    //flaglist.Add(item);
                    //                    //config = config.addconfig(flaglist, item, "", null, "onLine", null);
                    //                    //configToJosn = Newtonsoft.Json.JsonConvert.SerializeObject(config);   //转JOSN
                    //                    //server.allsend(configToJosn);

                    //                }
                    //            }
                    //            if (repetitive_key)
                    //            {
                    //                Console.WriteLine("111111111111");
                    //                //    socket.Shutdown(SocketShutdown.Both);
                    //                socket.Close();
                    //                socket.Dispose();
                    //            }
                    //            else
                    //            {
                    //                Form1.f1.addListbox_flag(config.flag);

                    //                //添加flag到LIST
                    //                flaglist.Add(socket_flag);
                    //                server.clientFlag_list.Add(config.flag, socket);   //将Flag 和 client 的套接定对应
                    //                config = config.addconfig(flaglist, socket_flag, null, null, "onLine", null);
                    //                configToJosn = Newtonsoft.Json.JsonConvert.SerializeObject(config);   //转JOSN
                    //                server.allsend(configToJosn);
                    //            }
                    //        }
                    //    }
                    //    else if (config.operationCode == "P001" && config.message != "")
                    //    {
                    //        timer.Dispose();
                    //        Form1.f1.appendText(config.message);
                    //        //                analysisJosn(config.message);
                    //    }
                    //    else if (config.operationCode == "message" && config.message != "" && config.socket_ip == "")    //判断消息操作(回馈群发)
                    //    {

                    //        timer.Dispose();
                    //        Form1.f1.appendText(config.message + "\r\n");
                    //    }
                    //    else if (config.socket_ip != "" && config.message != "" && config.operationCode == "message")//判断消息操作(回馈单发)
                    //    {
                    //        timer.Dispose();
                    //        config send2json = config.addconfig(null, config.flag, null, config.message, "message", null);
                    //        string configToJosn = Newtonsoft.Json.JsonConvert.SerializeObject(send2json);   //转JOSN
                    //        server.onesend(config.socket_ip, configToJosn);
                    //    }
                    //    else
                    //    {
                    //        timer.Dispose();
                    //    }

                    ////}
                    //else
                    //{
                    Form1.f1.appendText("收到了消息:" + message + "\r\n");
                    //   server.allsend(message);
                    //}
                }
                // 判断client是否断开,没断开就继续调用自己,断开就删除这个连接的套接字
                if (server.IsSocketConnected(socket))
                {
                    StartKeepAlive StartKeepAlive = new StartKeepAlive(socket_flag, buffer);
                    StartKeepAlive._StartKeepAlive(socket);
                }
                else
                {
                    if (socket != null)
                    {
                        server.downLine(socket_flag);
                    }
                    timer.Dispose();
                }
            }
            catch (Exception ex)
            {
                Form1.f1.appendText(ex.Message + "666" + "\r\n");
            }
        }