C# 为什么只有当tcp请求是环回请求时才有效?
我在c#中遇到了这个问题,如果我发出环回(127.0.0.1)tcp请求,我可以连接到同一台PC上的服务器并发送数据,但如果我尝试从同一网络上的另一台设备进行连接,则无法工作。还尝试将客户端中的ip更改为网络ip(192.168.43.58),但即使它位于同一设备上,也仅当ip为环回ip时才起作用。还试图用我的智能手机作为路由器来创建一个新的网络,以防另一个有防火墙或类似的东西,但同样的问题 客户端(软件与服务器位于同一设备上,ip绝对正确,错误代码为:10061) 服务器C# 为什么只有当tcp请求是环回请求时才有效?,c#,sockets,tcp,ip,C#,Sockets,Tcp,Ip,我在c#中遇到了这个问题,如果我发出环回(127.0.0.1)tcp请求,我可以连接到同一台PC上的服务器并发送数据,但如果我尝试从同一网络上的另一台设备进行连接,则无法工作。还尝试将客户端中的ip更改为网络ip(192.168.43.58),但即使它位于同一设备上,也仅当ip为环回ip时才起作用。还试图用我的智能手机作为路由器来创建一个新的网络,以防另一个有防火墙或类似的东西,但同样的问题 客户端(软件与服务器位于同一设备上,ip绝对正确,错误代码为:10061) 服务器 class Prog
class Program
{
static void consoleLog(string msg)
{
msg = String.Format("[{0}] - {1}", DateTime.UtcNow.ToString(), msg);
Console.WriteLine(msg);
}
static void Main(string[] args)
{
String host = "127.0.0.1";
int portnum = 8888;
TcpListener server = new TcpListener(IPAddress.Parse(host), portnum);
consoleLog("------------------------------------------------");
consoleLog("Server Accept client on port: " + portnum.ToString());
consoleLog("------------------------------------------------");
server.Start();
while (true)
{
using (TcpClient client = server.AcceptTcpClient())
{
consoleLog("Connected! from " + client.Client.RemoteEndPoint.ToString());
//stuff
client.Close();
consoleLog("Closed ------------------------------------------");
}
}
}
}
TL;博士
尝试将服务器托管在0.0.0.0
上
说明: 服务器托管在环回IP上。如果根据您的操作系统选中
ipconfig
或ifconfig
,您将看到分配给系统的多个IP。所有这些IP都属于系统上的物理或虚拟接口。例如:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
...
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
....
vboxnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.56.1 netmask 0xffffff00 broadcast 192.168.56.255
然后
$ nc -v 127.0.0.1 8080
nc: connectx to 127.0.0.1 port 8080 (tcp) failed: Connection refused
你可以试试上面的实验
通过使用0.0.0.0
,您可以使用特定的IP侦听或告诉服务器侦听您拥有的所有接口。这有着特殊的意义
$ http-server -a 0.0.0.0
Starting up http-server, serving ./
Available on:
http://127.0.0.1:8080
http://192.168.0.2:8080
http://192.168.56.1:8080
Hit CTRL-C to stop the server
然后你可以连接到他们中的任何一个
$ nc -v 127.0.0.1 8080
nc: connectx to 127.0.0.1 port 8080 (tcp) failed: Connection refused
$ http-server -a 0.0.0.0
Starting up http-server, serving ./
Available on:
http://127.0.0.1:8080
http://192.168.0.2:8080
http://192.168.56.1:8080
Hit CTRL-C to stop the server