NTPサーバのを作成しようと考えています。
NTPのサーバについては調べて何となく送信するデータを作成するまではできました。
基本的な事でつまずいてしまったのですが、UDPで相手からデータを受信した時、相手が指定したローカルポートと相手のIPアドレスはどのように取得すればよいのでしょうか。
よろしくお願いします。
どうやってWinsock使っているかによるが、Winsockコントロールの場合はRemoteIPとかRemotePortとかで読み取れたと思われる。
編集 削除・クライアント側
受け取り用のポート(LocalPort)を決める
送り先ポート(RemotePort)の123(NTP)に問い合わせデータを発信
・サーバ側
受け取り用のポート(LocalPort)を123にしておきWinsock1.Bind
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)でデータを受信したら、送り先ポート(RemotePort)の????に時刻送信。
というような感じです。
つまりクライアント側の受け取り用のポートは、ソフトによって違ったりランダムで設定されるのがほとんどかと思います。なのでサーバ側から送信しようとするとUDPのヘッダあたりから取得しないといけないと思います。あと送信先のIPアドレスなども要りますね。
どう取得すればよいのでしょうか?また何か勘違いなどあればご指摘ください。
お願いします。
クライアントのポートがランダムだったらファイヤーウォールを
通過できないと思うんですが。
(どこを開けたらいいのか分からないし)
ざっと見たところクライアントも123を使っているように見えましたが。
勘違いかもしれませんので調べてみてください。
UDPなんて使わないから確かじゃないが、
Winsockコントロールのヘルプには
RemoteHostIP プロパティ
UDP プロトコルを使用する場合、DataArrival イベントが発生したときに、UDP データを送信したマシンの IP アドレスがこのプロパティに設定されます。
と書いてある。
違うのか?
ガッさん二回もレスしていただきありがとうございます。
ガッさんの言うとおり
Winsock1.GetData bytBuf
Winsock1.RemoteHost = Winsock1.RemoteHostIP
Winsock1.RemotePort = Winsock1.RemotePort
で相手のポートとIPが取得でき送信できました。
ありがとうございました。