【问题标题】:I am getting an exception when my tcp client connects to the server with ip address but works with "localhost"当我的 tcp 客户端使用 ip 地址连接到服务器但使用“localhost”时出现异常
【发布时间】:2011-03-05 00:41:43
【问题描述】:

我正在编写一个简单的 C# tcp 客户端和服务器程序。服务器最终将在另一台机器上,但现在我只是在同一台机器上进行测试。当我使用 ip 地址创建 TcpClient 时,我收到一个异常错误“每个套接字地址(协议/网络地址/端口)通常只允许使用一次”。但如果我使用“localhost”而不是 IP 地址,它会起作用。我从 ipconfig 获取 IP 地址。我还尝试让服务器在另一台机器上运行,当我指定远程机器的 ip 地址时,我的 TcpClient 得到相同的异常。如何使用 IP 地址建立连接?谢谢。

下面是我创建 TcpClient 的代码

            IPAddress ipaddr = IPAddress.Parse("192.168.128.100");
            int port = 3000;


            int tries = 0;
            client = null;
            while (tries < 6) // try for 3 seconds
            {
                try
                {
                    tries++;
                    IPEndPoint ipEndpt = new IPEndPoint(ipaddr, port);
                    client = new TcpClient(ipEndpt);
                }
                catch (Exception ex)
                {
                    client = null;
                    Thread.Sleep(500);
                }
            }

【问题讨论】:

  • 另外,贴一些代码,会有帮助的。
  • 是的..谢谢你这就是问题所在。我应该调用 Connect 并传入服务器 IPEndPoint 而不是传递给 TcpClient 构造函数
  • 抱歉,我刚刚看到我发表了评论而不是回答。

标签: c# tcp sockets


【解决方案1】:

当你创建 tcp 客户端时,你是否定义了一个端口?如果是这样,你不应该。相反,您将连接到服务器的端口。

【讨论】:

  • 其实创建TcpClient时必须指定端口。但是,您不能做的是指定您将连接到的端口(用于实例化TcpClientIPEndPoint)(当连接到本地主机上的服务时)。所以,如果你想在你自己的本地机器上建立一个 Telnet 连接,TcpClient 端点地址应该是 23 以外的任何端口。然后你在端口 23 上连接到你的本地 IP 地址以启动 Telnet 连接。但是您的回答为我指明了正确的方向,所以谢谢!
【解决方案2】:

可能有另一个服务正在侦听该端口上的接口。

你应该试试

netstat -oan

然后搜索端口 3000。如果您在结果中找到一行,则最后一个文件是进程的 pid,您也可以在任务管理器中找到。

TCP    192.168.128.100:3000         0.0.0.0:0              LISTEN         4711

4711 = PID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2012-08-31
    相关资源
    最近更新 更多