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 に答える