我遇到了一些问题,如果工作与否,我无法在家检查。 这是代码
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();
}
}
}
我有一个简单的程序连接到此,然后发送带有数据的字符串。它在localhost上工作正常,但是当我尝试连接另一台计算机时出现问题。
我甚至关闭了PC和路由器上的防火墙,就像我在朋友的笔记本电脑上做的那样。每次我尝试连接时,他的计算机都拒绝连接。也许我做错了什么?
当然,ipAddress
现在是一个本地地址,因为它目前仅与此有关。有什么建议吗?
答案 0 :(得分:13)
您需要将其设置为接受来自任何IP的连接,此处有一个IPAddress重载函数:
System.Net.IPAddress.Any
使用它代替127.0.0.1,它将解决您的问题。
答案 1 :(得分:4)
您正在侦听127.0.0.1这是一个环回地址,这是一个特殊地址,意思是“这台计算机”。这意味着您只接受在运行服务器的同一台计算机上建立的连接。
您需要侦听服务器的一个(或多个)真实IP地址。
答案 2 :(得分:3)
您的问题是,在初始化TcpListener时显式设置IP地址只允许它接受来自该地址的连接。因此,输入127.0.0.1的本地地址只会接受来自PC的连接。
您要使用的实现如下:
TcpListener tcpListener = new TcpListener(IPAddress.Any, port);
这将允许来自任何IP地址的连接连接到指定端口上的程序。
答案 3 :(得分:1)
我认为是您的计算机(服务器)拒绝连接,因为127.0.0.1是本地的(-only)。
尝试这个简单的重载:
TcpListener tcpListener = new TcpListener(port);