C# 无法从远程计算机连接

C# 无法从远程计算机连接,c#,connection,tcpclient,tcplistener,C#,Connection,Tcpclient,Tcplistener,我有一些问题,我不能在家里检查它是否有效。 这是密码 using System; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; using System.Net.Security; class Program { private static IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); priva

我有一些问题,我不能在家里检查它是否有效。 这是密码

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Net.Security;

class Program
{
    private static IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
    private static int port = 6000;
    private static string data = null;

    static void Main(string[] args)
    {
        Thread thread = new Thread(new ThreadStart(receiveThread));
        thread.Start();
        Console.ReadKey();
    }

    public static void receiveThread()
    {
        while (true)
        {
            TcpListener tcpListener = new TcpListener(ipAddress, port);
            tcpListener.Start();

            Console.WriteLine("Waiting for connection...");

            TcpClient tcpClient = tcpListener.AcceptTcpClient();

            Console.WriteLine("Connected with {0}", tcpClient.Client.RemoteEndPoint);

            while (!(tcpClient.Client.Poll(20, SelectMode.SelectRead)))
            {
                NetworkStream networkStream = tcpClient.GetStream();
                StreamReader streamReader = new StreamReader(networkStream);

                data = streamReader.ReadLine();

                if(data != null)
                    Console.WriteLine("Received message: {0}", data);
            }
            Console.WriteLine("Dissconnected...\n");
            tcpListener.Stop();
        }
    }
}
我也有一个简单的程序连接到这个,然后发送一个包含数据的字符串。它在本地主机上运行良好,但当我尝试连接其他计算机时出现问题

我甚至关闭了电脑和路由器上的防火墙,就像我在朋友的笔记本电脑上做的那样。每次我尝试连接时,他的计算机都拒绝连接。也许我做错了什么


当然,
ipAddress
现在是一个本地地址,因为它目前只使用该地址。有什么建议吗?

我认为是您的计算机(服务器)拒绝连接,因为127.0.0.1是本地的(-only)

尝试以下简单重载:

  TcpListener tcpListener = new TcpListener(port);

您正在收听的是127.0.0.1,这是环回地址,这是一个特殊地址,表示“这台计算机”。这意味着您将只接受与服务器运行在同一台计算机上的连接


您需要侦听服务器的一个(或多个)真实ip地址。

您的问题是,在初始化tcplister时显式设置ip地址只允许它接受来自该地址的连接。因此,输入127.0.0.1的本地地址将只接受来自您电脑的连接

要使用的实现如下所示:

TcpListener tcpListener = new TcpListener(IPAddress.Any, port);

这将允许来自任何IP地址的连接在指定端口上连接到您的程序。

您需要将其设置为接受来自任何IP的连接,有一个IPAddress重载功能:

System.Net.IPAddress.Any

使用它而不是127.0.0.1,它将解决您的问题。

据说此方法已被弃用。我使用了一个本地主机ip,因为我在我的计算机上监听传入的连接。我认为它应该按原样工作,还是我错了?127001只是你的电脑本身。您需要在外部可见的IP上侦听,请使用IPAddress。是否有任何答案。因此,我应该使用那里的“我的internet”IP来侦听传入的连接?您可以使用IPAddress.Any来侦听您的所有接口,或者使用一个特定接口的地址来侦听该接口。如果您需要侦听多个接口,但不是所有接口,那么每个地址需要一个侦听器。