Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TcpListener TcpClient获取IP地址_C#_Tcp - Fatal编程技术网

C# TcpListener TcpClient获取IP地址

C# TcpListener TcpClient获取IP地址,c#,tcp,C#,Tcp,我想从你那里得到IP地址 服务器端 TcpListener ftp_listener = new TcpListener(IPAddress.Any, ftpport); newclient = listener.AcceptTcpClient(); 如何找到新的客户端IP地址 客户端 TcpClient ftpclient = new TcpClient(); ftpclient.Connect(ipAddress, ftpport); 如何查找ftpclient IP地址 目前我正在

我想从你那里得到IP地址

服务器端

TcpListener ftp_listener = new TcpListener(IPAddress.Any, ftpport);
 newclient = listener.AcceptTcpClient();
如何找到新的客户端IP地址

客户端

TcpClient ftpclient = new TcpClient();
 ftpclient.Connect(ipAddress, ftpport);
如何查找ftpclient IP地址

目前我正在使用

 TcpClient ftpclient = new TcpClient();

            //get IpAddress of Server
#pragma warning disable CS0618 // Type or member is obsolete
            IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0];
#pragma warning restore CS0618 // Type or member is obsolete

            ftpclient.Connect(ipAddress, ftpport);// "192.168.1.160", ftpport);
有没有更好的方法


谢谢

首先,您的服务器代码是错误的,在启动服务器之前您不能接受客户端,因此代码必须如下所示

TcpListener ftp_listener = new TcpListener(IPAddress.Any, ftpport);
ftp_listener.Start();
var newclient = listener.AcceptTcpClient();

// getting the client ip 2 ways :
var clientIpLAN = newclient.Client.LocalEndPoint; // locally this return "127.0.0.1:[YourServerFTPPort]"
var clientIpWAN = newclient.Client.RemoteEndPoint; // locally this return "127.0.0.1:[totally random port]"

让客户端获得无法通过魔法找到的服务器IP。你需要知道你想连接到哪里。有很多方法,但都需要一个静态的位置,你知道总是可用的。例如,web服务可以为您提供当前可以连接的有效IP列表或单个IP。您可能有一个web数据库,它具有您可以连接的IP。如果您总是让服务器和客户端在同一台计算机上运行,那么localhost或127.0.0.1几乎总是可以工作,因为没有主机文件shenanigan。

首先,您的服务器代码是错误的,在启动服务器之前,您无法接受客户端,因此代码需要如下所示

TcpListener ftp_listener = new TcpListener(IPAddress.Any, ftpport);
ftp_listener.Start();
var newclient = listener.AcceptTcpClient();

// getting the client ip 2 ways :
var clientIpLAN = newclient.Client.LocalEndPoint; // locally this return "127.0.0.1:[YourServerFTPPort]"
var clientIpWAN = newclient.Client.RemoteEndPoint; // locally this return "127.0.0.1:[totally random port]"

让客户端获得无法通过魔法找到的服务器IP。你需要知道你想连接到哪里。有很多方法,但都需要一个静态的位置,你知道总是可用的。例如,web服务可以为您提供当前可以连接的有效IP列表或单个IP。您可能有一个web数据库,它具有您可以连接的IP。如果您总是让服务器和客户端在同一台计算机上运行,那么localhost或127.0.0.1几乎总是可以工作,因为没有主机文件shenanigan。

对于服务器和客户端,获取远程端点IP地址和端口的方法是相同的

获取服务器上的客户端IP地址:

IPEndPoint remoteIpEndPoint = newclient.Client.RemoteEndPoint as IPEndPoint;
Console.WriteLine("Client IP Address is: {0}", remoteIpEndPoint.Address);
获取客户端上的服务器IP地址:

    IPEndPoint remoteIpEndPoint = ftpclient.Client.RemoteEndPoint as IPEndPoint;
    Console.WriteLine("FTP Server IP Address is: {0}", remoteIpEndPoint.Address);

对于服务器和客户端,获取远程端点IP地址和端口的方法是相同的

获取服务器上的客户端IP地址:

IPEndPoint remoteIpEndPoint = newclient.Client.RemoteEndPoint as IPEndPoint;
Console.WriteLine("Client IP Address is: {0}", remoteIpEndPoint.Address);
获取客户端上的服务器IP地址:

    IPEndPoint remoteIpEndPoint = ftpclient.Client.RemoteEndPoint as IPEndPoint;
    Console.WriteLine("FTP Server IP Address is: {0}", remoteIpEndPoint.Address);

因此,服务器和客户端在同一台机器上。通常,用户需要向客户端提供要连接的地址或主机。所以,我很难看到,你将如何处理这个问题。您可以迭代NetworkAdapters,但有什么意义呢?使用newClient.Client.RemoteEndPoint.ToString。newClient.Client为您提供基础套接字。我正在同一台pc上测试。。。我需要找到每台电脑的IP地址的方法clients@Fildor,他可能正在编写ftp客户端,而PASV/PORT命令意味着对话的一方需要告诉另一方要使用什么IP/PORTuse@CaiusJard啊,对。这是有道理的。所以服务器和客户端在同一台机器上。通常,用户需要向客户端提供要连接的地址或主机。所以,我很难看到,你将如何处理这个问题。您可以迭代NetworkAdapters,但有什么意义呢?使用newClient.Client.RemoteEndPoint.ToString。newClient.Client为您提供基础套接字。我正在同一台pc上测试。。。我需要找到每台电脑的IP地址的方法clients@Fildor,他可能正在编写ftp客户端,而PASV/PORT命令意味着对话的一方需要告诉另一方要使用什么IP/PORTuse@CaiusJard啊,对。这很有道理。应该是RemoteEndPoint吗?@OguzOzgul我应该说你是对的。这将取决于他需要什么。Remote将返回WAN,Local将返回LANNo,LocalEndPoint将返回接受tcp连接的ip地址和端口。我们正在监听一个特定的端口,但当我们接受tcp连接时,它会被另一个空闲端口接受。RemoteEndPoint将提供目标远程IP地址和端口。它不应该是RemoteEndPoint吗?@OguzOzgul我应该说你是对的。这将取决于他需要什么。Remote将返回WAN,Local将返回LANNo,LocalEndPoint将返回接受tcp连接的ip地址和端口。我们正在监听一个特定的端口,但当我们接受tcp连接时,它会被另一个空闲端口接受。RemoteEndPoint将提供目标远程IP地址和端口。