web-dev-qa-db-fra.com

Est-il possible d'exécuter un serveur de socket et un client de socket sur la même machine?

Dans Java il est possible de créer un serveur de socket et un client de socket, est-il possible d'avoir une instance du serveur de socket en cours d'exécution et un client de socket/serveur qui reçoit des données du serveur de socket sur la même machine?

par exemple, le serveur de socket s'exécute sur le port 60010 et le client de socket s'exécute sur la même machine se connectant à ce port via un socket ou devrai-je utiliser une nouvelle machine et l'ajouter à mon réseau? S'il possède une adresse IP et un numéro de port uniques exécutés sur la couche TCP/IP.

19
Aaron

Voici un exemple exécutable simple pour vous aider à démarrer. Il démarre deux threads, l'un avec un ServerSocket et l'autre qui établit une connexion Socket. L'un envoie continuellement des chaînes et l'autre les imprime.

Vous devriez simplement pouvoir exécuter cette classe telle quelle.

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();
    }
}
21
ulmangt

Oui, vous pouvez disposer des éléments suivants sur la même machine:

ServerSocket server = new ServerSocket(60010);
Socket client = server.accept();

Ailleurs:

Socket socket = new Socket("localhost", 60010);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hello server");
3
Abdullah Jibaly

Oui, vous pouvez exécuter un client et un serveur sur la même machine. Je le fais tout le temps pour le développement. Si vous rencontrez des problèmes, certains routeurs ont des problèmes pour retransmettre les paquets. Essayez d'utiliser localhost au lieu de votre IP externe pour le développement.

1
Joel

Oui c'est tout à fait possible. Chaque OS a une interface loopback . Vous pouvez avoir plusieurs clients connectés à un serveur sur votre ordinateur. Ce type de communication a lieu via l'interface de bouclage.

0
Rushil Paul