Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    Esempio server

    codice:
        public void ServerRun() {
    
           try {
    
    
    
              server_socket = new ServerSocket( 5050, 100,
    
                                      InetAddress.getByName("127.0.0.1"));
    
              display.setText("Server waiting for client on port " +
    
    			       server_socket.getLocalPort() + "\n");
    
    
    
              // server infinite loop
    
              while(true) {
    
                 Socket socket = server_socket.accept();
    
                 display.append("New connection accepted " +
    
    				   socket.getInetAddress() +
    
    				   ":" + socket.getPort() + "\n");
    
                 input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    
                 output = new PrintWriter(socket.getOutputStream(),true);
    
    
    
                 // print received data
    
                 try {
    
                    while(true) {
    
                       String message = input.readLine();
    
                       display.append("\n" + message);
    
                       output.println( "\nFrom Server==> " + message );
    
                       if (message.toUpperCase().equals( "QUIT" ))
    
                          break;
    
                    }
    
                 }
    
                 catch (IOException e) {
    
                    display.append("\n" + e);
    
                 }
    
    
    
                 // connection closed by client
    
                 try {
    
                    socket.close();
    
                    display.append("\n Connection closed by client");
    
                 }
    
                 catch (IOException e) {
    
                    display.append("\n" + e);
    
                 }
    
              }
    
           }
    
           catch (IOException e) {
    
              display.append("\n" + e);
    
           }
    
        }
    vorrei capire come funziona il ciclo while, cioè, è sempre in loop anche quadno nn ci sn connessioni? Quali sono i parametri del costruttore ServerSocket? La classe inetaddress cosa fa esattamente?

    Per trasformare questo codice in modo che accetti + connessioni, basta fare

    class mioserver extends Thread ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    Quali sono i parametri del costruttore ServerSocket?
    basta guardare la doc!!
    http://java.sun.com/j2se/1.4.2/docs/...verSocket.html
    http://java.sun.com/j2se/1.4.2/docs/...l#ServerSocket(int,%20int,%20java.net.InetAddress)

    ServerSocket(int port, int backlog, InetAddress bindAddr)
    Create a server with the specified port, listen backlog, and local IP address to bind to.

    vorrei capire come funziona il ciclo while, cioè, è sempre in loop anche quadno nn ci sn connessioni?
    certamente è sempre in loop anche quando nn ci sono connessione. se quando nn ci fossero connessioni il serve andrebbe in pausa come farebbe poi a "svegliarsi" quando arriva la richiesta di un nuovo client???

    Per trasformare questo codice in modo che accetti + connessioni, basta fare
    class mioserver extends Thread ?
    si estendi e poi implementi il metodo run

    qui c'è un esempio di un server per una chat
    http://www.pierotofy.it/pages/sorgen...wse/14236/580/
    qui un esempio di un semplice server con thread
    http://java.sun.com/developer/techni.../Serverthread/

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Il livello di codice è banale, poi si tratta solo di un sorgente - per giunta corto.
    Per il resto guarda le API.

  4. #4
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    codice:
    final public class JSQL extends Thread
    {
    	private int port = 5050;
    	private ServerSocket socket;
    	public String str;
    	public DataInputStream in;
    	public DataOutputStream out;
    	   
    	public JSQL()
    	{
    		//port = 147;
    		try 
    		{
    			socket = new ServerSocket(port);
    		} 
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		start();
    	}
        
    	public void run()
    	{
    		while (true) 
    		{
    			try 
    			{
    				Socket incoming = socket.accept();//aspetta connessioni
    				System.out.println("New connection accepted on "+ incoming.getInetAddress() + ":" + incoming.getPort());
    				in = new DataInputStream(incoming.getInputStream());
    				PrintWriter t = new PrintWriter(incoming.getOutputStream(),true);
    				try
    				{
    					while (true)
    					{
    						str = in.readLine();
    						t.println(str);
    						if (str.toUpperCase().equals("QUIT"))
    						{
    							System.out.println("Goodbye friend");
    							//System.exit(0);
    						}
    					}
    				}
    				catch (IOException e)
    				{
    					System.out.println(e);
    				}
    			}
    			catch (IOException e)
    			{
    				System.out.println(e);
    			}
    		}
            }
    	
    	public static void main(String arg[])
    	{
    		new JSQL();
    	}
    }
    nn capisco perché prende sempre una connessione per volta...
    come lo modifico?

  5. #5
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    Perche' questo e' UN Thread, ossia tu esegui una classe che e' un Thread ma non gestisci in alcun modo il multithreading. Invece la logica e': la classe server (che puo' anche non estendere Thread / implementare Runnable) va in esecuzione, e ad ogni richiesta di connessione da parte di un client delega (istanziando/runnando) un nuovo Thread ad occuparsene.

  6. #6
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    uhmm...vediamo se ho capito bene..
    creo quindi un altra classe, e passo i parametri di connessione (socket) a questa?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da FinalFantasy
    uhmm...vediamo se ho capito bene..
    creo quindi un altra classe, e passo i parametri di connessione (socket) a questa?
    Esattamente.
    In realtà è bene passare al thread anche un riferimento al Server (ma non è necessario sempre), mentre è sufficiente passare solo gli stream di input e output (Senza passare l'intera socket).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.