0

我在使用 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 地址,是否有不同的实现?

谢谢。

4

1 回答 1

0

我找到的最佳解决方案是自己解析主机名并使用其中的地址。

例如,

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

IPAddress 地址是我最终将消息发送到的地址。

由于我的程序的规划最终没有任何时候都具有带有 IP 地址的用户界面,所以现在程序发送到哪个 IP 并不重要,只要将消息发送到正确的计算机即可。

于 2012-12-05T05:44:54.080 回答