Webresponse 无法通过 GSM 连接工作
Webresponse doesn't work through GSM connection
我正在尝试通过 GSM VPN 隧道发送 http 请求。下面是负责发送它的部分代码。我已经使用 "clumsy" 对其进行了测试,它在 400-500 毫秒内都能正常工作。但是在将程序放入目标系统之后,所有发送请求的尝试都以错误结束("catch" 发生,out in device 不会改变其状态)。
GSM link 位置不佳(ping 80-400 毫秒,偶发数据包丢失等),但我预计多次尝试中至少有一次会成功。我的代码有什么问题?
Web异常状态为:"Timeout"
完整的 http link 看起来像:
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;
;
}
基本上我在 c# 方面处于 "script kid" 水平,所以如果您能做到那么好,请提供尽可能完整的代码;-)
好的,问题解决了。感谢 DavidG
看起来响应传输的时间比 ping 长得多(它在纯文本中只有几位数字,所以我很惊讶)。我已将超时时间增加到 10 秒,并且工作正常。
广告:最后超时增加到 20 秒,即使是 15 秒也会在大部分时间造成问题(奇怪的是,如果有连接,我会在 2-3 秒内得到答复,但超时必须设置为值10+)
我正在尝试通过 GSM VPN 隧道发送 http 请求。下面是负责发送它的部分代码。我已经使用 "clumsy" 对其进行了测试,它在 400-500 毫秒内都能正常工作。但是在将程序放入目标系统之后,所有发送请求的尝试都以错误结束("catch" 发生,out in device 不会改变其状态)。 GSM link 位置不佳(ping 80-400 毫秒,偶发数据包丢失等),但我预计多次尝试中至少有一次会成功。我的代码有什么问题?
Web异常状态为:"Timeout"
完整的 http link 看起来像:
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;
;
}
基本上我在 c# 方面处于 "script kid" 水平,所以如果您能做到那么好,请提供尽可能完整的代码;-)
好的,问题解决了。感谢 DavidG
看起来响应传输的时间比 ping 长得多(它在纯文本中只有几位数字,所以我很惊讶)。我已将超时时间增加到 10 秒,并且工作正常。
广告:最后超时增加到 20 秒,即使是 15 秒也会在大部分时间造成问题(奇怪的是,如果有连接,我会在 2-3 秒内得到答复,但超时必须设置为值10+)