Зависание имени хоста TcpClient

У меня возникла проблема с использованием TcpClient для отправки данных через поток, записанный StreamWriter.

    private void sendMessage(string[] hostlist, string message)
    {
        foreach (string host in hostlist)
        {
            try
            {
                messageClient = new TcpClient(host, 24300);
                StreamWriter writer = new StreamWriter(messageClient.GetStream());
                writer.Write(message);
                writer.Flush();
            }
            catch (Exception)
            {
                MessageBox.Show("Error 1\n" +
                                "This may be due to two things:\n" +
                                "1. The hostname is invalid.\n" +
                                "2. The destination computer is not online.",
                                "Error Sending Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

    }

Проблема заключается в том, где инициализируется messageClient. Если я использую IP-адрес, зависаний нет вообще, сообщение мгновенно отправляется и принимается. Однако, если я использую имя хоста, такое как «lappy» (имя моего ноутбука), программа полностью зависает ровно на 6 секунд, а затем отправляет сообщение. Это происходит каждый раз, когда вы пытаетесь отправить сообщение, используя имя хоста. Есть ли что-то, что я делаю неправильно здесь? Есть ли другая реализация, если вам нужно использовать имена хостов, а не IP-адреса?

Спасибо.


person lmcintyre    schedule 02.12.2012    source источник


Ответы (1)


Лучшее решение, которое я нашел, - это разрешить имя хоста самостоятельно и использовать в нем адрес.

Например,

IPHostEntry hostlist = Dns.Resolve(hostname[0]);
IPAddress address = hostlist.AddressList[0];

Адрес IPAddress — это адрес, на который я отправлю сообщение.

Поскольку планирование моей программы закончилось отсутствием пользовательского интерфейса с IP-адресами в любой момент, теперь не имеет значения, на какой IP-адрес отправляет программа, если сообщение отправляется на правильный компьютер.

person lmcintyre    schedule 05.12.2012