Web响应无法通过GSM连接工作

时间:2015-04-17 08:58:07

标签: c# gsm httpwebresponse

我试图通过GSM VPN隧道发送http请求。以下是负责发送它的代码的一部分。我使用"笨拙"进行了测试,它可以正常工作4到500毫秒。但是在将程序引入目标系统之后,所有尝试发送请求都以错误结束(" catch"发生,在设备中输出并不会改变其状态)。 GSM链路位置较差(ping 80-400ms,偶然丢包等),但我预计至少有一次尝试将以成功结束。我的代码出了什么问题?

Webexception状态为:"超时"

完整的http链接如下:

  

192.168.1.100/outs.cgi?out0=0

答案是(明文中的设备输出状态):

  

10000

        private int switch_kontroler(string adress, int outnr, int state)
    {
        int i = 0;
        if (this.checkBox1.Checked == true) //I have checbox "start GSM mode" in Form
            goto GSM; 
        else
            goto Test;
   GSM:  
        if (i<3)
        {
            goto Test;
        }
        else
            goto Koniec;
   Test:
        try
            {
                i++;
                label3.Text = "Próba przełączenia: "+i;
                this.Refresh();
                WebRequest request = WebRequest.Create("http://" + adress + "/outs.cgi?out" + outnr + "=" + state);
                request.Method = "GET";
                request.Timeout = 1000; //BTW. Why program works up to 500ms if timeout is set at 1000?
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
                string result = sr.ReadToEnd();
                label3.Text = result.ToString();
                if (result[outnr] - '0' == state)
                    if (result[outnr] == '1')
                    {
                        label3.Text = "Załączono kamerę";
                        return 1; //info to the rest of program about succes (or not) of this method
                    }
                    else
                    {
                        label3.Text = "Wyłączono kamerę";
                        return 0;
                    }
                this.Refresh();
                response.Close();
            }
            catch (WebException e)
            {
                label3.Text = "Przełączenie nieudane: " + e.Status;
                this.Refresh();
                if (this.checkBox1.Checked == true)
                    goto GSM;
                else
                    goto Koniec;
Koniec:
       return 2;
                ;
        }

基本上我是在一个&#34;脚本小孩&#34; c#中的级别如果您可以那么好,请提供最大可能的完整代码,请; - )

1 个答案:

答案 0 :(得分:0)

好的,问题解决了。感谢DavidG

看起来响应的传播时间比ping快得多(它只是纯文本中的几个数字,所以我很惊讶)。我已将超时时间提高到10秒,并且运行正常。

广告:最后超时上升到20秒,甚至15在很长一段时间内都会产生问题(奇怪的是,如果有连接,我会在2-3秒内得到答案,但超时必须设置为10+ )