2

2つのプログラムを使用してUDPプロトコル(クライアントとサーバー)を介して相互に通信していますが、クライアントがConnectメソッド(string hostname、int port)を使用してサーバーに接続すると、何も起こりませんでした。これはコードです:

                udpclient.Connect("asuspc",6500);
            string duongdan = tbduongdan.Text;
            Byte[] sendbyte = Encoding.ASCII.GetBytes(duongdan);
            udpclient.Send(sendbyte, sendbyte.Length);

「asuspc」は、接続しようとしているコンピューターの名前です。しばらくすると、ホスト名がコンピュータの名前ではなく「リモートホストのDNS名」であることがわかり、「リモートホストのDNS名」とは何ですか?「のDNS名コンピュータのリモートホスト」?

4

3 に答える 3

0

定義上、UDPはコネクションレス型プロトコルです。データを送受信するために接続する必要はありません。

オブジェクトを呼び出すことConnect()は、デフォルトのリモートホストを設定する以外に何も行わないため、メソッドを使用するたびにオブジェクトを指定する必要がないことに注意してください。したがって、クライアントがメソッドを呼び出した後、何も「発生」することを期待しないでください。UdpClientSendConnect

それが邪魔にならないように、サーバーとクライアントの両方がプライベートLAN上にある場合は、コンピューターのIPを使用してみませんか?例えば

// replace 192.168.1.44 with the server's private IP
udpclient.Connect("192.168.1.44",6500);
string duongdan = tbduongdan.Text;
Byte[] sendbyte = Encoding.ASCII.GetBytes(duongdan);
udpclient.Send(sendbyte, sendbyte.Length);
于 2012-11-13T14:10:27.987 に答える
0

うーん...TCP/IPを少し読むと大いに役立つと思います:-)

すべてのマシンにはIPアドレスが割り当てられています。これらの長いIPアドレスを覚えておく必要がないように、DNSサーバーが作成されたので、「host.domain.com」と書くことができます。DNSサーバーは、この「マシンDNS名」がIPアドレスxx.xx.xxに対応することを通知します。 .xx。

つまり、マシンの「DNS名」を知るために、Windows(およびLinux)では次のように書くことができます。

nslookup ip_address_of_the_machine

例:nslookup 192.168.1.2

お役に立てば幸いです。

于 2012-11-13T09:37:47.157 に答える
0

サーバー側では、(IPアドレスのみを取得するコード)

// get the ip and port number where the client will be listening on
static IPEndPoint GetClientInfo()
{
    // wait for client to send data
    using (UdpClient listener = new UdpClient(6500))
    {
        IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 6500);
        byte[] receive_byte_array = listener.Receive(ref groupEP);

        return groupEP;
    }
}

次にIPを取得します

var ip = clientInfo.Address.ToString();
    var port = clientInfo.Port;

UdpClient client = new UdpClient(new IPEndPoint( IPAddress.Any, 6500));
client.Connect(ip, port);  // use ip address

次に、クライアント側で、バッファを使用してデータを受信できます

于 2012-11-13T09:41:46.420 に答える