Javaでは、ソケットサーバーとソケットクライアントを作成できます。ソケットサーバーのインスタンスを実行し、ソケットサーバーからデータを受信しているソケット/サーバークライアントを持つことができます。同じマシンで?
たとえば、ソケットサーバーはポート60010で実行され、ソケットクライアントはソケットを介してそのポートに接続している同じマシンで実行されていますか、または新しいマシンでそれをネットワークに追加する必要がありますか? TCP/IPレイヤーで実行されている固有のIPアドレスとポート番号がある場合。
以下に、簡単な実行可能な例を示します。 2つのスレッドを開始します。1つはServerSocket
を使用し、もう1つはSocket
接続を確立します。 1つは継続的に文字列を送信し、もう1つは文字列を印刷します。
このクラスをそのまま実行できるはずです。
import Java.io.BufferedReader;
import Java.io.BufferedWriter;
import Java.io.IOException;
import Java.io.InputStreamReader;
import Java.io.OutputStreamWriter;
import Java.net.ServerSocket;
import Java.net.Socket;
import Java.net.UnknownHostException;
public class SocketTest {
public static void main(String[] args) throws IOException {
startServer();
startSender();
}
public static void startSender() {
(new Thread() {
@Override
public void run() {
try {
Socket s = new Socket("localhost", 60010);
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(s.getOutputStream()));
while (true) {
out.write("Hello World!");
out.newLine();
out.flush();
Thread.sleep(200);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
public static void startServer() {
(new Thread() {
@Override
public void run() {
ServerSocket ss;
try {
ss = new ServerSocket(60010);
Socket s = ss.accept();
BufferedReader in = new BufferedReader(
new InputStreamReader(s.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
はい、同じマシンで次のものを使用できます。
ServerSocket server = new ServerSocket(60010);
Socket client = server.accept();
どこか別の場所:
Socket socket = new Socket("localhost", 60010);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hello server");
はい、クライアントとサーバーを同じマシンで実行できます。私は開発のためにいつもそれをします。ただし、問題が発生している場合は、一部のルーターがパケットを自分自身に転送するのに問題があります。開発には、外部IPではなくlocalhostを使用してみてください。
はい、それは完全に可能です。すべてのOSに loopback インターフェイスがあります。コンピューター上の1つのサーバーに複数のクライアントを接続できます。この種の通信は、ループバックインターフェイスを介して行われます。