VS 2008
我正在使用以下代码来检测客户端是否可以连接到我们的SIP服务器。这工作正常。但是,客户端已经更改了网络,现在我的应用程序必须从代理服务器后面连接到SIP服务器。
我得到的错误是:
“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应xxx.xxx.xx.xx:xx”
这段代码工作正常,直到我必须从代理服务器后面连接。
我看不到任何属性,我可以将代理地址添加到套接字。
我错过了什么吗?
非常感谢任何建议,
public bool IsSIPServerAvailable()
{
bool isAvailable = true;
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
try
{
sock.Connect("xxx.xxx.xx.xx", xx);
}
catch (SocketException ex)
{
Console.WriteLine(ex.Message);
isAvailable = false;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
isAvailable = false;
}
finally
{
if (sock.Connected)
{
sock.Close();
}
}
return isAvailable;
}
答案 0 :(得分:3)
请参阅我的回答here,也许会有所帮助。一般的想法是首先建立与代理的连接,然后使用HTTP CONNECT命令打开到给定主机和端口的另一个TCP连接。
答案 1 :(得分:1)
这与此question非常相似。我认为不可能通过代理服务器创建套接字连接。您需要某种协议以及更多协议,通常管理员设置代理服务器以拒绝来自标准HTTP,HTTPS之外的端口的连接。
一种解决方案是使用HTTP上的隧道。
答案 2 :(得分:1)
代理的整个想法是在不更改应用程序的情况下更改网络拓扑。因此,无需更改应用程序,但代理配置/设置中需要进行更改。
要独立于您的应用程序检查代理配置,您可以使用Telnet Host Port
查看是否收到相同的超时/错误消息,或者在输入几个字符后断开连接。