如何从代理服务器后面的C#中连接TcpClient?

时间:2010-12-03 11:26:28

标签: c# tcpclient

我在代理服务器后面,无法与TcpClient连接到GMail的POP3。我收到以下错误:

System.Net.Sockets.SocketException (0x80004005): No such host is known

任何线索?

代码:

var tcpClient = new TcpClient();
try
{
    tcpClient.ReceiveTimeout = 60000;
    tcpClient.SendTimeout = 60000;
    tcpClient.Connect("pop.gmail.com", 995);
    output.AppendLine("Connection OK!");
}
catch (SocketException e)
{
    output.AppendLine(e.ToString());
}
finally
{
    tcpClient.Close();
}

app.config(代理在Internet Explorer中设置):

<?xml version="1.0"?>
<configuration>
  <system.net>
    <defaultProxy>
      <proxy usesystemdefault="True" />
    </defaultProxy>
  </system.net>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

1 个答案:

答案 0 :(得分:1)

无。不可能。它看起来像:

  • 贵公司的DNS不包含公共DNS信息。
  • 因此,您的计算机会询问代理,该代理会询问外部DNS。
  • 这意味着你也没有可能的路由
  • 无路由无论如何都不可能进行TCP连接。按设计。

可能的解决方法:

  • 使用SOCKS代理。不太可能存在。
  • 询问您的IT部门 - 解决此问题的正确方法是绕过firwewall,但要使用正确的渠道发送电子邮件(内部SMTP服务)。
  • 如果正确的方法是使用Gmail,一些不太聪明的人(即经理)会让你陷入困境。然后,他们必须为您打开TCP连接,并为您的计算机提供公共DNS信息。

最后,你可以两种方式 - 通过代理强制所有客户端,或者你有直接的TCP连接。