Как получить IP-адрес с именем хоста? - PullRequest
0 голосов
/ 27 января 2011

Я делаю клиента, который подключается к локально размещенному серверу, который получает серийные номера с сервера. Программа работает, если я использую этот код ниже, но способ, которым она работает, заключается в получении имени DNS, так что теоретически это занимает только www.website.com, и я не могу понять, как заставить его распознавать нормальный IP-адрес 127.0. 0.1 или локальный IP-адрес:

   IPHostEntry ipHostInfo = Dns.GetHostEntry("www.website.com");
            IPAddress ipAddress = ipHostInfo.AddressList[0];
            IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

Прилагается моя попытка получить это для разрешения ip, но я не думаю, что подхожу к этому праву, полный код можно увидеть здесь: Код клиента StockReader

    public class AsynchronousClient
{

    private const int port = 21;

    // ManualResetEvent instances signal completion.
    private static ManualResetEvent connectDone =
        new ManualResetEvent(false);
    private static ManualResetEvent sendDone =
        new ManualResetEvent(false);
    private static ManualResetEvent receiveDone =
        new ManualResetEvent(false);

    // The response from the remote device.
    private static String response = String.Empty;

    private static void StartClient()
    {
        // Connect to a remote device.
        try
        {
            // Establish the remote endpoint for the socket.
            // The name of the 

      //******************ISSUE BEGINS HERE*********************************  
            string sHostName = Dns.GetHostName();
            IPHostEntry ipHostInfo = Dns.GetHostEntry(sHostName);
            IPAddress [] ipAddress = ipHostInfo.AddressList; 
            IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

            // Create a TCP/IP socket.
            Socket client = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);

            // Connect to the remote endpoint.
            client.BeginConnect(remoteEP,
                new AsyncCallback(ConnectCallback), client);
            connectDone.WaitOne();

            // Send test data to the remote device.
            Send(client, "This is a test<EOF>");
            sendDone.WaitOne();

            // Receive the response from the remote device.
            Receive(client);
            receiveDone.WaitOne();

            // Write the response to the console.
            Console.WriteLine("Response received : {0}", response);

            // Release the socket.
            client.Shutdown(SocketShutdown.Both);
            client.Close();

        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }

Ответы [ 3 ]

1 голос
/ 27 января 2011

Когда вы устанавливаете значение ipAddress, вы можете использовать метод IPAddress.Parse для передачи строки и получения объекта IPAddress вместо использования имени домена:

string ip = "127.0.0.1";
IPAddress address = IPAddress.Parse(ipAddress);
IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
0 голосов
/ 10 мая 2017
// Establish the remote endpoint for the socket.  
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint remoteEP = new IPEndPoint(ipAddress, portnumber);

// Create a TCP/IP socket.  
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect(remoteEP);
0 голосов
/ 27 января 2011

Попробуйте использовать string sHostName = "localhost";

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