UDPサーバを構成するには?(NTP)

解決


bon  2004-12-01 17:40:42  No: 117938  IP: [192.*.*.*]

NTPサーバのを作成しようと考えています。

NTPのサーバについては調べて何となく送信するデータを作成するまではできました。

基本的な事でつまずいてしまったのですが、UDPで相手からデータを受信した時、相手が指定したローカルポートと相手のIPアドレスはどのように取得すればよいのでしょうか。

よろしくお願いします。

編集 削除
ガッ  2004-12-01 19:18:49  No: 117939  IP: [192.*.*.*]

どうやってWinsock使っているかによるが、Winsockコントロールの場合はRemoteIPとかRemotePortとかで読み取れたと思われる。

編集 削除
bon  2004-12-01 19:48:04  No: 117940  IP: [192.*.*.*]

・クライアント側
受け取り用のポート(LocalPort)を決める
送り先ポート(RemotePort)の123(NTP)に問い合わせデータを発信

・サーバ側
受け取り用のポート(LocalPort)を123にしておきWinsock1.Bind
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)でデータを受信したら、送り先ポート(RemotePort)の????に時刻送信。

というような感じです。
つまりクライアント側の受け取り用のポートは、ソフトによって違ったりランダムで設定されるのがほとんどかと思います。なのでサーバ側から送信しようとするとUDPのヘッダあたりから取得しないといけないと思います。あと送信先のIPアドレスなども要りますね。

どう取得すればよいのでしょうか?また何か勘違いなどあればご指摘ください。
お願いします。

編集 削除
ももんが  2004-12-01 21:51:44  No: 117941  IP: [192.*.*.*]

クライアントのポートがランダムだったらファイヤーウォールを
通過できないと思うんですが。
(どこを開けたらいいのか分からないし)
ざっと見たところクライアントも123を使っているように見えましたが。
勘違いかもしれませんので調べてみてください。

編集 削除
ガッ  2004-12-02 00:17:21  No: 117942  IP: [192.*.*.*]

UDPなんて使わないから確かじゃないが、
Winsockコントロールのヘルプには

  RemoteHostIP プロパティ
  UDP プロトコルを使用する場合、DataArrival イベントが発生したときに、UDP データを送信したマシンの IP アドレスがこのプロパティに設定されます。 

と書いてある。
違うのか?

編集 削除
bon  2004-12-02 01:18:03  No: 117943  IP: [192.*.*.*]

ガッさん二回もレスしていただきありがとうございます。

ガッさんの言うとおり
Winsock1.GetData bytBuf
Winsock1.RemoteHost = Winsock1.RemoteHostIP
Winsock1.RemotePort = Winsock1.RemotePort
で相手のポートとIPが取得でき送信できました。

ありがとうございました。

編集 削除