尝试连接TcpClient时出现SocketException

时间:2016-01-30 02:55:52

标签: c# .net sockets tcp tcpclient

当我尝试创建新的TcpClient时,我收到SocketException,这是我的代码:

public void TcpOpenConnection()
{
    // The next line is where the exception is occurring.
    tcpClient = new TcpClient(ipAddress, port);
    connected = true;
}

我已经检查过确保端口在cmd中打开netstat -a,我甚至做了另一个函数来检查端口是否打开:

public static bool PortCheck(int port)
{
    bool portOpen = false;

    IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
    TcpConnectionInformation[] tcpConnInfo = ipGlobalProperties.GetActiveTcpConnections();

    foreach (var tcpConn in tcpConnInfo)
    {
        if (tcpConn.LocalEndPoint.Port == port)
        {
            portOpen = true;
            break;
        }
    }
    return portOpen;
}

返回true。我得到的例外是SocketException,它说我正在尝试连接的机器正在主动拒绝连接。这可能是什么问题?我也试过其他端口,没有运气。

如果您需要更多信息,请询问,我很乐意提供更多信息。

2 个答案:

答案 0 :(得分:1)

  

我得到的例外是SocketException,它说我尝试连接的机器正在主动拒绝连接。

这可能表明目标主机没有收听端口,这可能是由多种原因引起的:

  • 服务器网络的路由器未正确端口转发
  • 路由器的防火墙/服务器的防火墙正在阻止连接
  • 服务器和客户端未使用相同的端口
  • 服务器配置错误

列表继续......但实际上,此错误意味着服务器不允许连接。

答案 1 :(得分:0)

如果端口已打开且您尝试连接。你得到SocketException,因为没有任何东西可以获得客户端连接。

所以你需要在这个端口上托管一个Tcplistner。

reffunc()

你可以连接到。

static void StartServer()
{
    int port = 150;

    TcpListener listner = new TcpListener(IPAddress.Any, port);
    listner.Start();
    // This line waits the client connection.
    TcpClient remote_client = listner.AcceptTcpClient();

    // do something with remote_client.
}