-4

LANローカルネットワーク上で動作するJavaとのチャットメッセンジャーを作りたいです。クライアントで私は持っています:

Socket socket=new Socket(serverIP, port);

serverIPとは何かを理解する方法、serverSocketが着信接続を待機しているコンピューターのIPアドレス

これは非常に小さなネットワークです。1台のサーバーと1台のクライアント、クロスケーブルネットワーク

4

3 に答える 3

2

クライアントはサーバー IPを知っている必要があります。事前に定義されている必要があります。クライアントがそれを見つけることができる魔法の方法はありません。だからあなたはできる:

  • クライアント コードでサーバー IP をハードコードする
  • クライアントの実行時にコマンドライン引数としてサーバー IP を渡す

LANルーターにDHCPが設定されている場合、IPアドレスは時間の経過とともに変化するため、2番目のバリアントが優れています. 商用のチャット クライアントには、よく知られている URL/IP がハードコードされているか、そこからチャット サーバーのアドレスを取得していると思います。

このC# の例 では、両方を同じマシンで実行することでこの問題を回避していますが、クライアントには「サーバー IP」がハードコーディングされていることがわかります。

このVB の例では、ユーザーが IP を入力しています。

編集:

クライアントのSocket (書いたとおり) は、サーバーのServerSocketに接続します。ServerSocket は、クライアントがその IP アドレスから接続したばかりなので、クライアントのソケット IP アドレスを知っています! これを理解していない場合は、この優れたチュートリアルを読んでください (そして自分で試してください) 。

「引数として渡す」:

「project」という名前のフォルダーがあり、その中に「mypackage」という名前のフォルダーがあり、その中に HelloWorld.class という名前のファイルがあるとします。HelloWorld.class は、次のような Java ソース ファイルである HelloWorld.java からコンパイルされた Java クラス ファイルです。

package mypackage;

public class HelloWorld {

public static void main(String[] args) {
    System.out.println("You entered the following arguments from the command line:");
    for (int i = 0; i< args.length; i++) {
        System.out.println(args[i]);
    }
}

プロジェクト ディレクトリに移動して、次のように記述します。

java mypackage.HelloWorld commandlineArgument1 commandlineArgument2

それは印刷されます:

You entered the following arguments from the command line:
commandlineArgument1
commandlineArgument2

このためのチュートリアル

于 2012-12-28T18:41:23.800 に答える
0

私はネットワーク プログラミングを練習したくありません。これは実際のプログラムであり、商用化される予定です。とにかく、クロスケーブルを介してネットワークに接続できるのは2台のコンピューターだけです。プログラムはさまざまなコンピューターにインストールされるため、サーバーの IP は、プログラミング中は不明であり、事前に定義することはできません。今、私は自分のプログラムがそのローカルネットワークでサーバーのIPを見つけてサーバーに接続できる方法を探しています。したがって、引数を介してクライアントに渡すことはできません。これは不明であり、プログラムはそれを見つける必要があります...最終的に、Javaプログラムがサーバーのホスト名を自動的に見つける2つの優れた方法を見つけました。ユーザーは任意の IP または任意の情報をプログラムします...

1. まず、ローカル ホスト名を見つけます。

InetAddress.getLocalHost().getHostName();

次に、次のコマンド ラインを実行します。

net view

これは、現在ネットワーク内にあるホストの名前を返します (私の状況では LAN ネットワーク)。ローカル ホスト名とすべてのホスト名があるので、他のホストを見つけることができます (私の状況では間違いなくサーバーです。ネットワーク内の 2 台のコンピューターのみ...) 名前を付けて、それに簡単に接続します。

Socket socket=new Socket(InetAddress.getByName(SERVER_NAME),port);

2. クライアントは、multicastSocketing を介してサーバーの IP を取得することもできます。すべてのクライアントとサーバーは事前定義された IP のグループに参加し、サーバーはその IP をすべての受信者 (= クライアント) に送信します。

于 2012-12-29T09:10:49.807 に答える
0

ソケット クラスはクライアント用であるため、これは接続先のサーバーの IP になります。

http://docs.oracle.com/javase/1.4.2/docs/api/java/net/ServerSocket.htmlおよびhttp://docs.oracle.com/javase/1.4.2/docs/api/javaを参照してください。 /net/Socket.html

于 2012-12-28T18:29:12.740 に答える