Deux server et plusieurs client....

collinm Messages postés 3 Date d'inscription jeudi 6 octobre 2005 Statut Membre Dernière intervention 6 octobre 2005 - 6 oct. 2005 à 21:47
collinm Messages postés 3 Date d'inscription jeudi 6 octobre 2005 Statut Membre Dernière intervention 6 octobre 2005 - 6 oct. 2005 à 21:48

1 réponse

collinm Messages postés 3 Date d'inscription jeudi 6 octobre 2005 Statut Membre Dernière intervention 6 octobre 2005
6 oct. 2005 à 21:48
salut

j'ai fait une petite application client/server qui utilse des sockets...
plusieurs client peuvent se connecter sur le serveur...

je tente maintenant d'avoir deux serveur, un sur le port 4444 et un autre sur le port 4445
du côté client il se connecte sur le port 4444 et après s'il n'est pas capable il se branche sur le 4445 (pas encore fait donc pour le moment il ne se connecte que sur le 4444)

mon code

ServerMain class
import java.net.*;
import java.io.*;

public class ServerMain {

    public static void main(String[] args) throws IOException {        
        Server server1 = new Server(4444);
        Server server2 = new Server(4445);
        server1.start();
        server2.start();
   }
}

Server class
import java.net.*;
import java.io.*;

public class Server extends Thread{

    private static int nbRequest=0;

    public synchronized int addRequest(){
        return nbRequest++;
    }

    public synchronized int getRequest(){
        return nbRequest;
    }
    
    public int port=0;
    
    public Server(int port) {
        super("Server");
        this.port = port;
    }

    public void run() {
        ServerSocket serverSocket = null;
        Socket s=null;
        boolean listening = true;
        try {
            serverSocket = new ServerSocket(port);
            s=serverSocket.accept();
        } catch (IOException e) {
            System.err.println("Could not listen on port.");
            System.exit(-1);
        }
        System.out.println("server run, wait connecting....");
        while (listening)
            new ServerThread(s).start();

        //serverSocket.close();
    }
}

import java.net.*;
import java.io.*;

public class ServerThread extends Thread {

    private Socket socket = null;
    public ServerThread(Socket socket) {
        super("ServerThread");
        this.socket = socket;
    }

    public void run() {

      try {
          System.out.println("connexion successfull");
          PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
          BufferedReader in = new BufferedReader(
                        new InputStreamReader(
                            socket.getInputStream()));

          String inputLine, outputLine;
          while ((inputLine = in.readLine()) != null) {
            System.out.println("Server: " + inputLine);
            inputLine = inputLine.toUpperCase();
            out.println(inputLine);
            if (inputLine.equals("Bye."))
                  break;
            }
            out.close();
            in.close();
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

client class
i need to add function to be able to try during 10 second to connect to server 1(4444).... i the server don't respond... i try to connect to server2 (port 4445)
import java.io.*;
import java.net.*;
import java.lang.*;

public class Client {
    public static void main(String[] args) throws IOException {
        String serverHostname = new String ("127.0.0.1");
        int port=4444
        System.out.println ("Essai de se connecter a  l'hote " + serverHostname + " au port. " + port);
        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            echoSocket = new Socket(serverHostname, port);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Hote inconnu: " + serverHostname);
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Ne pas se connecter au serveur: " + serverHostname);
            System.exit(1);
        }

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        String userInput;
        System.out.print ("Entree: ");
        while ((userInput = stdIn.readLine()) != null) {
            out.println(userInput);
            System.out.println("echo: " + in.readLine());
            System.out.print ("Entree: ");
        }
        out.close();
        in.close();
        stdIn.close();
        echoSocket.close();
    }
}

au niveau de l'éxécution...

quand je démarre le serveur, rien se passe...
le client se connecte

server run, wait connecting....
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
Attente de l'entree.....
connexion successfull
connexion successfull
connexion successfull
Attente de l'entree.....
connexion successfull
connexion successfull
connexion successfull
Attente de l'entree.....
Attente de l'entree.....
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull
connexion successfull

après quelques temps


Exception in thread "Server" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Unknown Source)


mon but était de créer deux threads server avec un numéro de port différent... chacun de ses threads démarrerait une nouvelle connexion (thread) pour chaque client

mais ça semble causer problème... si on pouvait m'aider...


merci
0
Rejoignez-nous