9

我有一些问题,我无法在家里检查它是否工作。这是代码

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();
        }
    }
}

我也有一个简单的程序来连接到它,然后发送一个带有数据的字符串。它在本地主机上运行良好,但是当我尝试连接不同的计算机时出现问题。

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

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

4

4 回答 4

14

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

System.Net.IPAddress.Any

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

于 2009-12-02T10:04:39.120 回答
4

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

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

于 2009-12-02T10:01:09.153 回答
3

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

您要使用的实现如下:

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

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

于 2009-12-02T10:03:32.113 回答
1

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

试试这个简单的重载:

  TcpListener tcpListener = new TcpListener(port);
于 2009-12-02T09:48:37.410 回答