次のコードがあるとします。
server = TCPServer.new(3200)
client = server.accept()
クライアントがメッセージを送信したポート番号を確認するにはどうすればよいですか? client.peeraddr と client.addr の両方を試しましたが、どちらも適切なポート番号を教えてくれません。
次のコードがあるとします。
server = TCPServer.new(3200)
client = server.accept()
クライアントがメッセージを送信したポート番号を確認するにはどうすればよいですか? client.peeraddr と client.addr の両方を試しましたが、どちらも適切なポート番号を教えてくれません。
client.peeraddr
に対応する配列を提供しますstruct addrinfo
。AF_INETの場合、次のようになります。
["AF_INET", 48942, "127.0.0.1", "127.0.0.1"]
そこからAddrinfoオブジェクトを作成し、次のようにポートを取得できます。
require 'socket'
server = TCPServer.new(3200)
client = server.accept()
addr = Addrinfo.new(client.peeraddr)
port = addr.ip_port
クライアントが接続しているポートは3200です。また、接続が作成されるクライアント側のポートは、未使用のポートからOSによって指定された、接続ごとにランダムです。