public ProtocolFunction(string ipstr, int port, int timeOutSec, string _key, string _simnum, System.Windows.Forms.TextBox msgBox)
        {
            IPAddress ip = IPAddress.Parse(ipstr);

            txtInfo = msgBox;
            key     = _key;
            simNum  = _simnum;
            WinFormHelper.ShowInfo(txtInfo, $"开始连接Connection");
            clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // clientSocket.Connect(new IPEndPoint(ip, port)); //配置服务器IP与端口
            clientSocket.BeginConnect(new IPEndPoint(ip, port), CallBackMethod, clientSocket);
            WinFormHelper.ShowInfo(txtInfo, $"Connection 正在连接......");
            //阻塞当前线程
            if (TimeoutObject.WaitOne(timeOutSec, false))
            {
                if (!clientSocket.Connected)
                {
                    WinFormHelper.ShowInfo(txtInfo, "连接服务器失败");
                    throw new Exception("socket连接失败");
                }
                WinFormHelper.ShowInfo(txtInfo, $"连接服务器成功,占用端口:{clientSocket.LocalEndPoint.ToString()}");
                isConnection = true;
            }
            else
            {
                throw new Exception("连接服务器超时了");
            }
        }
        private const int OutTimeConn = 10000; //连接时间超时  5秒

        public BaseResponse SendMessage(BaseRequest bmr, string WebsiteCode, string TellerCode)
        {
            TimeoutObject.Reset();
            BaseResponse result = null;

            _socket.BeginConnect(new IPEndPoint(IPAddress.Parse(RemoteIP), RemotePort), delegate(IAsyncResult ar) { TimeoutObject.Set(); }, _socket);
            if (TimeoutObject.WaitOne(OutTimeConn, false))
            {
                _socket.ReceiveTimeout = OutTime;
                _socket.SendTimeout    = OutTime;
                string str = bmr.ObjectToMessage();
                _socket.Send(Encod.GetBytes(str));
                len = _socket.Receive(buffer);

                if (len > 0)
                {
                    string strbuff = Encod.GetString(buffer);
                    switch (bmr.BusinessCode)
                    {
                    case "01": result = new Response01(buffer); break;

                    case "02": result = new Response02(buffer); break;

                    case "03": result = new Response03(buffer); break;

                    case "04": result = new Response04(buffer); break;

                    case "05": result = new Response05(buffer); break;

                    case "06": result = new Response06(buffer); break;

                    case "07": result = new Response07(buffer); break;

                    case "08": result = new Response08(buffer); break;

                    case "09": result = new Response09(buffer); break;

                    default: return(null);
                    }
                }
                bmr.SaveMessage(WebsiteCode, TellerCode);
                if (result != null)
                {
                    result.BankCode = bmr.BankCode;
                    result.SaveMessage(WebsiteCode, TellerCode);
                }
                return(result);
            }
            else
            {
                if (_socket.Connected)
                {
                    _socket.Shutdown(SocketShutdown.Both);
                    _socket.Close();
                }
                throw new Exception("所提供的服务器连接超时");
            }
        }
Beispiel #3
0
        public void StartClient()
        {
            try
            {
                //1.0 实例化套接字(IP4寻址地址,流式传输,TCP协议)
                _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //2.0 创建IP对象
                IPAddress address = IPAddress.Parse(_ip);
                //3.0 创建网络端口包括ip和端口
                IPEndPoint endPoint = new IPEndPoint(address, _port);
                //4.0 建立连接
                _socket.BeginConnect(endPoint, CallBackMethod, _socket);
                //阻塞当前线程

                /*if (TimeoutObject.WaitOne(1000, false))//1s超时
                 * {
                 *  MessageBox.Show("网络正常");
                 * }
                 * else
                 * {
                 *  MessageBox.Show("连接超时");
                 * }
                 * //接收返回值
                 * byte[] buffer = new byte[1024 * 1024 * 3];
                 * //实际接收到的有效字节数
                 * int FtpReturn_len = _socket.Receive(buffer);//获取buffer(int)
                 * FtpReturn_Str = Encoding.UTF8.GetString(buffer, 0, FtpReturn_len);//FTPsocket返回值,UTF8编码buffer转为string格式
                 */
                if (TimeoutObject.WaitOne(1000, false))//1s超时//StartHeck_flag为0时,破解按钮没被开启,能弹窗“网络正常”
                {
                    if (StartHeck_flag == 0)
                    {
                        MessageBox.Show("网络正常,端口开放!");
                        WriteSeachInfo(textBox1.Text);
                        WriteSeachInfo(textBox4.Text);
                    }
                    Time_Out = 0;
                }
                else
                {
                    if (StartHeck_flag == 0)
                    {
                        MessageBox.Show("连接超时");
                    }
                    Time_Out = 1;//超时标志
                }
            }
            catch (Exception ex)
            {
                // _socket.Shutdown(SocketShutdown.Both);
                _socket.Close();
                MessageBox.Show(ex.Message);//远程主机强迫关闭了一个连接/无法连接/连接失败/通讯失败
            }
            //            Thread.Sleep(2000);
            //            MessageBox.Show("发送消息结束");
        }
Beispiel #4
0
        /// <summary>
        /// 开启服务,连接服务端
        /// </summary>
        public void StartClient()
        {
            try
            {
                //1.0 实例化套接字(IP4寻址地址,流式传输,TCP协议)
                _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //2.0 创建IP对象
                IPAddress address = IPAddress.Parse(_ip);
                //3.0 创建网络端口包括ip和端口
                IPEndPoint endPoint = new IPEndPoint(address, _port);
                //4.0 建立连接
                _socket.BeginConnect(endPoint, CallBackMethod, _socket);
                //阻塞当前线程
                if (TimeoutObject.WaitOne(1000, false))//1s超时//StartHeck_flag为0时,破解按钮没被开启,能弹窗“网络正常”
                {
                    if (StartHeck_flag == 0)
                    {
                        MessageBox.Show("网络正常");
                    }
                    Time_Out = 0;
                }
                else
                {
                    if (StartHeck_flag == 0)
                    {
                        MessageBox.Show("连接超时");
                    }
                    Time_Out = 1;//超时标志
                }


                /*/6.0 像服务器发送消息
                 *
                 *  for (int i = 0; i < 10; i++)
                 *  {
                 *      Thread.Sleep(2000);
                 *      string sendMessage = string.Format("客户端发送的消息,当前时间{0}", DateTime.Now.ToString());
                 *      _socket.Send(Encoding.UTF8.GetBytes(sendMessage));
                 *      Console.WriteLine("像服务发送的消息:{0}", sendMessage);
                 *  }
                 */
            }
            catch (Exception ex)
            {
                _socket.Close();
                MessageBox.Show(ex.Message);//远程主机强迫关闭了一个连接/无法连接/连接失败/通讯失败
            }
        }
Beispiel #5
0
        /// <summary>
        /// HttpPost方法
        /// </summary>
        /// <param name="Address">请求的地址(IP:端口)</param>
        /// <param name="method">方法名称</param>
        /// <param name="strPost">请求数据</param>
        /// <param name="dtStr">请求时间</param>
        /// <param name="Conifg">配置名</param>
        /// <param name="i">第几次请求</param>
        /// <param name="RecvTimeOut">返回超时</param>
        /// <param name="ReqTimeout">请求超时</param>
        /// <returns>返回数据</returns>
        public static string HttpPost(string Address, string method, string strPost, string dtStr, string Conifg = "", int i = 0, int RecvTimeOut = 3000, int ReqTimeout = 1000)
        {
            string innerErrorMessage = string.Empty;

            string data   = string.Empty;
            Socket socket = null;

            try
            {
                string[] strAddress = Address.Split(':');

                TimeoutObject.Reset();

                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                IPAddress ip = IPAddress.Parse(strAddress[0]);

                byte[] postBytes = Encoding.ASCII.GetBytes(UrlEncodeGB2312(strPost));

                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("POST /format=json&language=CSharp&method={0}{1} HTTP/1.1\r\n", method, string.IsNullOrEmpty(Conifg) ? string.Empty : string.Format("&USING={0}", Conifg));
                sb.Append("Content-Type: application/x-www-form-urlencoded\r\n");
                sb.AppendFormat("Host: {0}\r\n", Address);
                sb.AppendFormat("Content-Length: {0}\r\n", postBytes.Length);
                sb.Append("Connection: Keep-Alive\r\n\r\n");

                socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, RecvTimeOut);

                socket.BeginConnect(new IPEndPoint(ip, Convert.ToInt32(strAddress[1])), CallBackMethod, socket);

                //阻塞当前线程
                if (!TimeoutObject.WaitOne(ReqTimeout, false))
                {
                    //连接超时
                    return(string.Empty);
                }

                byte[] sendData = Encoding.ASCII.GetBytes(UrlEncodeGB2312(sb.ToString()));

                byte[] nCon = new byte[sendData.Length + postBytes.Length];
                sendData.CopyTo(nCon, 0);
                postBytes.CopyTo(nCon, sendData.Length);

                socket.Send(nCon);

                byte[] recive = new byte[40960];

                int nlen   = 0;
                int ntotal = 0;
                System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"(?<=Content-Length:)\d{1,8}");

                while (true)
                {
                    int nrec = socket.Receive(recive);
                    if (nrec == 0)
                    {
                        break;
                    }
                    ntotal += nrec;
                    string header = Encoding.Default.GetString(recive);
                    if (nlen == 0)
                    {
                        System.Text.RegularExpressions.Match match = reg.Match(header);
                        if (match.Success)
                        {
                            nlen = Convert.ToInt32(match.Value);
                        }
                    }
                    data += header;
                    int npos = data.IndexOf("\r\n\r\n");
                    if (npos != -1)
                    {
                        data = data.Substring(npos + 4);
                    }
                    if (ntotal - 78 - nlen.ToString().Length >= nlen)
                    {
                        break;
                    }
                }

                socket.Shutdown(SocketShutdown.Both);
            }
            catch (Exception ex)
            {
                innerErrorMessage = string.Format("JetermClient.{0}的HttpPost{1}请求抛异常:{2}请求时间:{3}{2}请求EtermServer服务器地址:{4}{2}请求数据:{2}{5}{2}返回:{2}{6}{2}异常信息为:{2}{7}", method, (i > 0 ? string.Format("第{0}次", i) : string.Empty), Environment.NewLine, dtStr, Address, strPost, (string.IsNullOrWhiteSpace(data) ? "返回为空" : data), ex.ToString());
                log.Error(innerErrorMessage);
            }
            finally
            {
                if (socket != null)
                {
                    socket.Close();
                }
            }

            if (!string.IsNullOrWhiteSpace(innerErrorMessage))
            {
                throw new Exception(innerErrorMessage);
            }
            return(data);
        }