1

いくつかのデータを送信するための単純なUDPClientプログラムを使用したソケットプログラミングから始めています。大きなコードスニペットは以下のとおりです。

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

class ShowIP
{
    public static void Main(string[] args)
    {
        string name = Dns.GetHostName();
        //name = "GSL1460";
        name = "GSL1296";
        try
        {
            IPAddress[] addrs = Dns.GetHostEntry(name).AddressList;
            foreach (IPAddress addr in addrs)
                Console.WriteLine("{0}/{1}", name, addr);

            Console.WriteLine("Started listening");
            Thread listenerThread = new Thread(new ThreadStart(StartListeningUDP));
            listenerThread.Start();

            Console.WriteLine("Started sending");
            for (int counter = 0; counter <= 3; counter++)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Sending {0} time", counter.ToString());
                StartSendingUDP(addrs[0]);
            }
            Console.ReadLine();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

    private static void StartListeningUDP()
    {
        UdpClient udpListener = null;
        IPEndPoint nwPoint = new IPEndPoint(IPAddress.Any, 12345);

        while (true)
        {
            try
            {
                udpListener = new UdpClient(12345);
                Console.WriteLine("Waiting to receive");
                Byte[] receivedBytes = udpListener.Receive(ref nwPoint);
                string receivedData = Encoding.ASCII.GetString(receivedBytes);

                Console.WriteLine("Data received : " + receivedData);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                udpListener.Close();
            }
        }
    }

    private static void StartSendingUDP(IPAddress clientAddress)
    {
        UdpClient udpSender = new UdpClient();
        try
        {
            Byte[] sendBytes = Encoding.ASCII.GetBytes("Say HI to Papa...");

            Console.WriteLine("Data Sent : Say HI to Papa...");
            udpSender.Send(sendBytes, sendBytes.Length, new IPEndPoint(clientAddress, 12345));
        }
        finally
        {
            udpSender.Close();
        }

    }
}

サンプルはローカルマシンでは正常に機能しますが、イントラネット上の別のマシンにデータを送信することはできません。

テスト中

  • 彼のマシンにデータを送信するための適切なコードのコメントを解除しています
  • 彼のマシンでReceiverビットを実行しています
  • 必要なポートが彼のマシンで開いていることを確認しました

私は何かが足りないのですか?提案してください。

4

4 に答える 4

1

udpSender.Flush?

于 2009-03-03T20:13:19.300 に答える
0

私はC#の人間ではないので、あなたのコードについてあまりコメントすることはできませんが、基本的には問題ないようです。送信先のIPアドレスが受信側のマシンに正しく解決されていることを確認してください。

また、Windowsがインターネット接続をファイアウォールで保護しているかどうかを確認し、ファイアウォールを無効にしてみてください。そして、マイクロソフトには、過去にいくつかの問題を引き起こした「安全な」コードに関するいくつかのアイデアがあることを私は知っています。詳細はありませんが、プロジェクトにネットワークへのアクセスを妨げる設定がある可能性があります。

于 2009-03-03T14:00:33.440 に答える
0

UDP リスナーは、localhost のみをリッスンしている可能性があります。あなたは交換しようとすることができます

udpListener = new UdpClient(12345)

StartListeningUDP() で

udpListener = new UdpClient(new IPEndPoint(IPAddress.Any,12345))
于 2009-03-04T14:36:11.380 に答える
0

事前にいくつかのことをしなければ、インターネット経由で UDP を実際に送信することはできません。途中で非常に多くの udp フィルターを取得します。ファイアウォールを無効にしても、ルーター/プロバイダーのモデムがファイアウォールをブロックするように設定できます。else - プロバイダー サーバーがブロックします。したがって、実際には、このポートがUDP用に開いていることを確認する必要があります。ファイアウォールでこのポートを開くか、ループバックアダプターをインストールしない限り、ローカルホストでは機能しません。

于 2009-10-26T19:35:45.033 に答える