Socket监听

来源:互联网 发布:会计从业资格考试软件 编辑:程序博客网 时间:2024/06/05 13:24


     bool isSend = false;
                    Socket sendSocket;
                    while (!isSend)
                    {
                        sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        try
                        {
                            sendSocket.Connect(SocketIP, SocketPort);
                        }
                        catch
                        {
                            Error err = new Error();
                            err.WriteError(0, "/Data QClient /Id " + Num + " /QueueID  " + FrmMain.strGueueNo + "  /Subscribe " + strType + " ");
                            isSend = true;
                            sendSocket.Shutdown(SocketShutdown.Both);
                            sendSocket.Close();
                            FrmMsg msg = new FrmMsg("请确认网络是否正常或重新取号!");
                            msg.ShowDialog();
                            msg.Close();
                            msg.Dispose();
                            GoToLogin();
                            return;
                        }



                        if (sendSocket.Connected)
                        {
                            #region 发送数据
                            Encoding gb2312 = Encoding.GetEncoding("gb2312");


                            //byte[] buffer = gb2312.GetBytes("/Data QClient /Id Y0004 /QueueID  " + FrmMain.strProjectNo + "  /Subscribe True ");
                            byte[] buffer = gb2312.GetBytes("/Data QClient /Id " + Num + " /QueueID  " + FrmMain.strGueueNo + "  /Subscribe " + strType + " ");
                            int retc = sendSocket.Send(buffer);
                            if (retc == -1)
                            {
                                Error err = new Error();
                                err.WriteError(2, "/Data QClient /Id " + Num + " /QueueID  " + FrmMain.strGueueNo + "  /Subscribe " + strType + " ");
                                isSend = true;
                                sendSocket.Shutdown(SocketShutdown.Both);
                                sendSocket.Close();
                                FrmMsg msg = new FrmMsg("服务器忙!请重新取号");
                                msg.ShowDialog();
                                msg.Close();
                                msg.Dispose();
                                GoToLogin();
                                return;
                            }
                            #endregion


                            #region 获取数据
                            byte[] inOptionValues = new byte[4 * 3];
                            BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);
                            BitConverter.GetBytes((uint)1000).CopyTo(inOptionValues, 4);
                            BitConverter.GetBytes((uint)500).CopyTo(inOptionValues, 8);
                            sendSocket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);


                            byte[] buffer_Call = new byte[sendSocket.ReceiveBufferSize];



                            sendSocket.ReceiveTimeout = 10000;   //设置超时时间
                            try
                            {
                                int m_read = sendSocket.Receive(buffer_Call, SocketFlags.Partial);


                                System.Text.Encoding chs = System.Text.Encoding.GetEncoding("gb2312");


                                string str_Read = chs.GetString(buffer_Call, 0, m_read);


                                string[] str_split = str_Read.Split(',');


                                if (str_split[0] == "完成" && str_split[1] == strQueueNum) //评价
                                {
                                    isSend = true;
                                    sendSocket.Shutdown(SocketShutdown.Both);
                                    sendSocket.Close();
                                }
                                else
                                {
                                    Error err = new Error();
                                    err.WriteError(1, "/Data QClient /Id " + Num + " /QueueID  " + FrmMain.strGueueNo + "  /Subscribe " + strType + " ");
                                    isSend = true;
                                    sendSocket.Shutdown(SocketShutdown.Both);
                                    sendSocket.Close();
                                    FrmMsg msg = new FrmMsg("服务器繁忙!请重新取号");
                                    msg.ShowDialog();
                                    msg.Close();
                                    msg.Dispose();
                                    GoToLogin();
                                    return;
                                }
                            }

   
catch (Exception e)     //捕捉超时这个事件g
                            {
                                Error err = new Error();
                                err.WriteError(1, "/Data QClient /Id " + Num + " /QueueID  " + FrmMain.strGueueNo + "  /Subscribe " + strType + " ");
                                isSend = true;
                                sendSocket.Shutdown(SocketShutdown.Both);
                                sendSocket.Close();
                                FrmMsg msg = new FrmMsg("请确认网络是否正常或重新取号");
                                msg.ShowDialog();
                                msg.Close();
                                msg.Dispose();
                                GoToLogin();
                                return;
                            }
                            #endregion
                        }
0 0