我使用C#编写了一个群聊,使用客户端套接字和服务器套接字。 当我使用VS 2017在我自己的电脑上运行程序(服务器和客户端)时,客户端和服务器之间的通信正常工作。 当我在笔记本电脑中运行客户端程序并在我自己的电脑上运行服务器时(仍然使用VS 2017,虽然我认为这不重要)客户端无法连接到服务器。
我的问题是如何在localhost之外连接服务器和客户端?
我将从服务器和客户端添加负责相互连接的功能。
启动服务器的服务器代码中的功能:
public static void ServerUp()
{
IPAddress ipAdd = IPAddress.Parse("127.0.0.1");
TcpListener myListener = new TcpListener(ipAdd, 8001);
myListener.Start();
Console.WriteLine("The server running at port: " + myListener.LocalEndpoint);
users = new List<ClientSocket>();
}
连接到服务器的客户端代码中的功能:
public static void ConnectToServer()
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Console.WriteLine("Connecting...");
IPEndPoint ipAdd = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001);
socket.Connect(ipAdd);
Console.WriteLine("Connected");
Console.WriteLine(new string('-',Console.WindowWidth));
}
答案 0 :(得分:1)
如果您在另一台计算机上运行客户端,它将穿过网络。
除非您以某种方式为服务器打开防火墙端口,否则Windows集成防火墙将阻止来自外部源的所有访问。
这很简单。
转到高级防火墙设置并打开服务器端口。
答案 1 :(得分:1)
更改IP。 127.0.0.1用于localhost。使用您的本地网络IP,例如192.168.1.10等。还在服务器机器的防火墙上打开了所需的端口(8001)。
答案 2 :(得分:0)
您需要服务器监听您的电脑的真实IP地址而不是127.0.0.1,并且在客户端,在您的笔记本电脑上,您必须使用计算机的IP地址而不是127.0.0.1。
127.0.0.1是本地网络地址,它不绑定到您的网络连接,只能在同一台计算机上访问,而不能在网络上访问。
此外,您的Windows防火墙可能会阻止传入连接 - 为您的计算机添加端口8001的入站tcp规则,或暂时禁用计算机上的防火墙。
答案 3 :(得分:0)
127.0.0.1是本地IP,使用网络DHCP服务器分配的IP。