TcpListener TcpClient получить IP-адрес - PullRequest
1 голос
/ 31 марта 2020

Я sh, чтобы получить IP-адрес от

На стороне сервера

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

как мне найти newclient IP-адрес, пожалуйста

на стороне клиента

TcpClient ftpclient = new TcpClient();
 ftpclient.Connect(ipAddress, ftpport);

как мне найти ftpclient ipaddress

В настоящее время я использую

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

Есть ли лучший способ ...

Спасибо

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Как для сервера, так и для клиента подход к получению удаленной конечной точки (IP-адрес и порт) одинаков.

  1. Получение IP-адреса клиента на сервере:

    IPEndPoint remoteIpEndPoint = newclient.Client.RemoteEndPoint as IPEndPoint;
    Console.WriteLine("Client IP Address is: {0}", remoteIpEndPoint.Address);
    
  2. Получить IP-адрес сервера на клиенте:

        IPEndPoint remoteIpEndPoint = ftpclient.Client.RemoteEndPoint as IPEndPoint;
        Console.WriteLine("FTP Server IP Address is: {0}", remoteIpEndPoint.Address);
    
1 голос
/ 31 марта 2020

Во-первых, ваш серверный код неверен, вы не можете принять клиента перед запуском сервера, поэтому код должен быть таким:

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-адрес сервера, который невозможно найти с помощью маги c. Вам нужно знать, куда вы хотите подключиться. Есть много способов, но всем нужно 1 stati c местоположение, которое, как вы знаете, всегда доступно. Например, веб-служба может предоставить вам список (или один) IP-адресов, к которым можно подключиться прямо сейчас. У вас может быть веб-база данных с IP-адресом, к которому вы можете подключиться. Если вы ВСЕГДА используете сервер и клиент на одном и том же компьютере, то localhost или 127.0.0.1 почти всегда работают, если отсутствует файл хоста shenanigan.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...