2012-11-21 4 views
8

私はJavaでソケットプログラミングを学んでいます。 私はこの文を使用してWebサイトに接続します。Javaソケット - ローカルポート

s = new Socket("www.nba.com", 80); 

私はアプリケーションをデバッグし、Sの内容を見てみると、私は次を参照してください。

Socket[addr=www.nba.com/2.21.246.97,port=80,localport=7846] 

1)私はどここのlocalportで7846知りたいですそれは正確に何から来ています。

2)ウェブサイトのIPアドレスが2.21.246.97の場合、ブラウザのアドレス欄に2.21.246.97と入力するだけでウェブサイトに接続できないのはなぜですか?


おかげ

+1

私はそれがホストに接続するマシンのポートだと思います。 –

答えて

6

これは、ローカルソケットポート番号です。通常、システムによって割り当てられます。

What is a Socket?を参照してください。クライアント側では

:クライアントは、サーバーが稼働している 上のマシンのホスト名とサーバが リッスンしているポート番号を知っています。接続要求を行うために、クライアントはサーバのマシンとポート上のサーバとの間で のランデブを試みます。 クライアントは、サーバに自身を識別させる必要もあり、この接続時に使用する ローカルポート番号にバインドします。 これは、通常 です。 2番目の質問については

私は、このIPアドレスは、(私が異なっている)あなたがwww.nba.comを検索するとき、あなたのDNSサーバによって得るものであると仮定します。問題は、このアドレスのHTTPサーバーが複数の仮想ホストにサービスを提供しているか、またはブラウザが送信するHostヘッダーが気になることです。あなたの場合は、www.nba.comではなくIPアドレスです。

+0

ローカルポートを自分で割り当てることはできますか? –

+1

@HasanTahsinはい。 [this constructor](http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#Socket(java.net.InetAddress、%20int、%20java.net)を使用してください。 InetAddress、%20int))。 – ShyJ

+1

@HasanTahsin [Socket(String host、int port、InetAddress localAddr、int localPort)]](http://docs.oracle.com/javase/6/docs/api/java/net/Socket)を参照してください。 .html#ソケット(java.lang.String、%20int、%20java.net.InetAddress、%20int)) –