このプログラムを実行する前に、我々は、Javaネットワークプログラミングについて少し知っておく必要があります。
ネットワークの基礎知識:
ネットワークモデル
OSI(開放型システム間相互接続Open Systems Interconnection)参照モデル。
TCP / IP参照モデルの
ネットワーク通信要素
IPアドレス
のポート番号
トランスポートプロトコルの
ネットワークプログラミングは、統合ネットワーク***技術やIO技術を指します。
ネットワークリファレンスモデル。
OSI参照モデルTCP / IPの
アプリケーション層---------------------
プレゼンテーション層、アプリケーション層の
セッション層--------------- ------
輸送層は、トランスポート層である
ネットワーク層インターネット層、
データリンク層-----------------
のネットワーク層にホスト
物理層--------- -----------
ネットワーク層7
*** ipconfig / allと物理アドレス:....... ...... 54-3H-4L-7P-44-JK、 このアドレス世界で唯一のです。(これはカードの識別番号です)
IPアドレス:InetAddressの
255まで(このセグメントは、一般的にローカルエリアネットワークを使用している)など:. 192.168.1.23などのネットワークデバイスを識別し
そうもユニークな、I FDSJLAKJFLのホスト名とIPアドレス:例えば、利用可能なホスト名を(簡単に覚えているために)覚えやすいです。
各コンピュータは、ネットワークカードを持っている(MAC)アドレス、IPアドレスのデフォルトのバインディングのアドレスは、デフォルトでは(ホストは自分の言葉にアクセス可能な場合、あなたはアクセスにこのアドレスを使用することができます。)127.0.0.1である
ローカルループバックアドレス: 127.0.0.1ホスト名:localhostを
ポート
識別プロセスの異なるプロセス識別するための論理アドレス、
有効なポートを:! 0 65535 0〜1024は、によって使用またはポートのために予約されています。
***転送プロトコル
定期的な通信
一般的なプロトコル:TCP、UDP
// ***は、ネットワークカードを検出が正常に動作しています。
C:\ユーザー>のping 127.0.0.1
これは、データの32のバイトでのping 127.0.0.1である:
127.0.0.1からの返信:バイト= 32時間<1msのTTL = 128
バイト= 32時間<1ミリ秒のTTL = 128:応答127.0.0.1から
127.0.0.1から応答:バイト= 32時間<1msのTTL = 128
応答127.0.0.1から:バイト= 32時間<1msのTTL = 128
ピング127.0.0.1統計:
パケット:= 4送信は、4 =損失= 0(0%の損失)を受信し
(ミリ秒単位)の推定往復時間:
最小= 0msと、最長= 0msと平均= 0msとの
、これは上記の結果ではなく、失敗した場合には、それはおそらくカードに問題があります。
// ***サイトにアクセスするために使用され、そこにある多くのゲーム広告、ゲームこれらのドメイン名が開いていない、それが唯一のホストがで独自のIPアドレス設定ファイルが開きますされます。広告サイトへのhostsファイルに書き込むことができます宣伝対応する。
***のconfigure hostsファイル。127.0.0.1 www.game.com.cn
このマシンは、ページが表示できないことを示し、このリソースを持っていません。
シリアル番号、あなたが自由に使用できるように、各ネットワークソフトウェアの検証は、使用していませんでした。ああ、私たちは、お使いのコンピュータは、検証プロセスではありません、代わりにコンピュータの独自のIPアドレスのサイトのIPアドレスを確認A。
しかし、私たちが最初にどのようなサイトのドメイン名のチェックはい知っていなければなりません。(360アドレスリスト)
ポート
***コンピュータでは、0〜65535 60,000ポートを使用することができます以上で、0〜1024のポートは、これらのポートの多くは、Windowsシステム上でアプリケーションを対応している使用しないようにしてください
***あなたが使用しますアップ、WindowsはデジタルIDを取らないポートを持つユニークな、ない二つのプログラムでした。
学び、TCP、UDP、ソケットを使用し、IOストリーム:
TCP / UDP
UDP(データグラムパケットプロトコル)
送信元と宛先のデータとの接続を確立することなく、パケットにカプセル化された。コネクション。
各パケットのサイズは64Kに制限されている。
接続がないので、関係なく、他のプロトコルは、信頼できない存在しない、(これも接続されていませんOK)、パッケージ(64K内部を)作る、送信したアドレスを入れる。
接続を確立することなく、高速な:のメリット
TCPを(伝送制御プロトコル)
接続を確立するには、データを伝送するためのチャネルを形成する。相手方中(接続)、いることを確認し
、接続でのデータ伝送の大容量。
スリーウェイハンドシェイクすることで、接続、信頼性の高いプロトコルを完了すること。そこにはありますか?私は。私が知っている。スリーウェイハンドシェイクを。
接続を確立する必要があり、効率が低くなります。
例:TCP UDPは、トランシーバーと同等のものを呼び出すのと同じです。
ソケット
ソケットが提供するネットワークサービスのための機構である。
通信の端部がソケットを有している。
ネットワーク通信の事実、ソケットとの間の通信。
データ2つのソケットIO送信の間。
TCPは、クライアントとサーバーの通信に使用されています。
UDPは、ポイントを送受信します。
TCPポイントそれは、クライアントとサーバーです。
LANのブロードキャストアドレスについて:
255のブロードキャストアドレス、私は、ブロードキャストアドレスに、セグメント上のすべてのホストにブロードキャストアドレスを1を作った、あなたが見る、私がいる限り、我々は同じLAN上にあるように、チャット機能の実現には、表示されます。ああ、それA。
java.io.BufferedReaderインポート、 読み込みにjava.io.IOException; インポートjava.io.InputStreamReader、 インポートjava.net.DatagramPacket; インポートjava.net.DatagramSocket; インポートjava.net.InetAddress; publicクラスUDPChatTest { 公共の静的な無効メイン(String []型引数)はIOExceptionが{スロー / * * グループによって実現UDPチャットプログラム:*ケースI * *アイデアを: * *このプログラムは、両方の髪を持って受け取り、あなたはマルチスレッド技術を使用する必要性、同時に実行する必要があります。 * *スレッドを発行する、スレッドがコレクションを担当して、二つのタスク(スレッドタスク);. * * * / //送信元ソケット、ソケットの受信端; DatagramSocketのsendSocket =新しい新規のDatagramSocketを(); DatagramSocketのreceSocket =新新のDatagramSocket(10000); //タスクオブジェクトを作成します。 送るSend新しい新=(sendSocket)を送信します。 RECE RECE =新新RECE(receSocket); // ***スレッドとオープンを作成します。 スレッドT1 =新しい新しいスレッド(送信); // ** *送信 スレッドT2は、新しいスレッド(RECEを)= ; // *** 受信 t1.start(); t2.start(); } } / * * * * 255のブロードキャストアドレス、私、ブロードキャストアドレスに、ブロードキャストアドレスをセグメント上のすべてのホストに送信され、あなたが見る、私がいる限り、我々は同じLAN内にあるように、チャット機能の実現には、表示されます。ああ、あなたは。 * * * * / 送信タスクを//ここで最初の、棚を取る必要があるものである。 クラス実装のRunnable {送信 プライベートたDatagramSocket DS、 公衆送信(DatagramSocketのDS){ this.ds = DSを; } @Override 公共ボイドRUN(){ //するSystem.out.println(「UDP2差出人RUN」); //ここ***書き込みポート番号がすでに使用中のプログラムを持っている場合、ポートので、プログラムが起動しません、このポート番号を使用することはできません号コンフリクト(アドレス異常がすでに使用中で起こる。) キーボード入力から// ***データ。 トライ{ BufferedReaderのBUFIN =新しい新しいBufferedReaderの(新しい新しいInputStreamReaderの(System.in)); // ***キーボード入力でありますブロックし、あなたは何のエントリを止めないではないだろう、ここでブロックされています。 文字列のライン=ヌル; ながら、{((ライン= bufin.readLine())!= NULL) バイト[] BUF = line.getBytes(); /配列へ/ ***データ。 のDatagramPacketのDatagramPacketの新しい新しいDPの=(BUF、buf.lengthに、InetAddress.getByName( "192.168.1.255")、10000); // ***ここでは、アドレスが他人を書き込むことができますIPあなたがチャットできるアドレスとポート番号、。 ds.send(DP); // ***それはキーボード入力であるので、我々は閉じタグを追加する必要があります。 IF(「886」.equals(ライン)){ BREAK; } } //閉じるリソース*** ds.close(); }キャッチ(IOExceptionをE){ } } } //タスクを受け取る。 クラスRECE実装したRunnable { プライベートDatagramSocketのDS; 公共RECE(DatagramSocketのDS){ this.ds = DS; } @Override 公共ボイドRUN(){ //するSystem.out.println( "udp2受信端RUN"); 一方、(真の){ 試み{ バイト[] = BUF新しい新しいバイト[1024]; のDatagramPacketのDatagramPacketの新しい新しいDPの= (buf.lengthにBUF、); ds.receive(DP);何もデータが受信されない場合は、// ***、ブロックされたが、ここにアップされていると思います。 文字列IP = dp.getAddress()はgetHostAddress();. int型ポート= dp.getPort(); 文字列のテキスト=新しい新しいString(dp.getData()、0、dp.getLength()); System.out.printlnは(IP + ":" +ポート+ ":" +テキスト)。 IF(text.equals( "886")){ System.out.printlnは(IP + "... IMを残す"); } }キャッチ(IOExceptionをE){ } // ds.close(); ***所得の人々を受信することは私にデータを送信し、私はシャットダウンするためのリソースを持っていないされました。 } } }
長いプログラムを開始すると、メッセージはホストのネットワークセグメントに送信されたブロードキャストアドレス255を介して送信されるように、誰もが見ることができるので、このプログラムは、チャットはもちろん、達成することができ、、LAN環境で使用されています、
IPアドレスはまた、人々はまだあなたは確かにそれを見ることができ、あなたの情報を送ることができますが、他の誰かがメッセージだけでショーを送信し、ブロードキャスト機能せず、独自のホストのIPアドレス、ちょうどあなた自身のIPアドレスを使用していないことができます私が書いたプログラムのIPアドレスが彼に送信されなかったため、応答メッセージは、表示されます。
おかげバイ