2010-02-02 12 views
20

In sostanza, desidero un server Java di base a cui più persone possano connettersi e quando uno dei client connessi (già codificato in Obj-c) invia dati ad esso, lo rimanda a tutti coloro che sono connessi.Come creare un server Java di base?

Sono un vero principiante di Java e non avrò bisogno di Java nel prossimo futuro per qualcosa di diverso da questo, quindi voglio uscirne il più presto possibile piuttosto che apprendere Java correttamente da zero. Quindi, se qualcuno ha qualche codice sorgente per questo o forse un tutorial, sarebbe molto apprezzato.

Grazie :) Ozzie

+0

Che tipo di protocollo utilizzano i client? –

+1

Utilizzano le prese :) – IApp

+4

Votato per la riapertura - SO davvero bisogno di capire come gestire le domande che possono avere diverse buone risposte. –

risposta

16

Ecco un semplice "Knock Knock" per gentile concessione del server di Sun:

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

public class KnockKnockServer { 
    public static void main(String[] args) throws IOException { 

     ServerSocket serverSocket = null; 
     try { 
      serverSocket = new ServerSocket(4444); 
     } catch (IOException e) { 
      System.err.println("Could not listen on port: 4444."); 
      System.exit(1); 
     } 

     Socket clientSocket = null; 
     try { 
      clientSocket = serverSocket.accept(); 
     } catch (IOException e) { 
      System.err.println("Accept failed."); 
      System.exit(1); 
     } 

     PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(
       new InputStreamReader(
       clientSocket.getInputStream())); 
     String inputLine, outputLine; 
     KnockKnockProtocol kkp = new KnockKnockProtocol(); 

     outputLine = kkp.processInput(null); 
     out.println(outputLine); 

     while ((inputLine = in.readLine()) != null) { 
      outputLine = kkp.processInput(inputLine); 
      out.println(outputLine); 
      if (outputLine.equals("Bye.")) 
       break; 
     } 
     out.close(); 
     in.close(); 
     clientSocket.close(); 
     serverSocket.close(); 
    } 
} 

Non si può ottenere molto più semplice di questo.

+0

Ho dato una rapida occhiata a quello di oggi e ho codificato qualcosa di simile in PHP che ha funzionato benissimo per i test precedenti. Al momento però sto cercando di connettermi e inviarlo a più utenti, a quanto pare ho bisogno di multi-threading? Sai come farei a farlo sull'esempio che hai fornito? – IApp

+1

http://www.kieser.net/linux/java_server.html: basta semplicemente creare una classe che gestisca le connessioni e invocarla tramite thread() –

+13

che cosa è 'KnockKnockProtocol'? –

-1

si avrà probabilmente bisogno di utilizzare la classe serversocket.

+0

Yeh ho visto un po 'di questo, ma lo trovo piuttosto difficile da capire. Grazie però :) – IApp

0

Ho fatto un programma Java che fondamentalmente ha implementato una sorta di chat tra un client e un server. Utilizzato un socket per aprire una porta del server che avrebbe sentito le connessioni in entrata. Dovresti avere un thread che li ascolti e che invochi le azioni ogni volta che entra una connessione valida.

+0

Sì, sono riuscito a far funzionare un server socket PHP di base, ma era in grado di collegare solo 1 client alla volta. A meno che non sia Actionscript o Objective-C, mi sto perdendo praticamente! – IApp

1

Prova a utilizzare l'API del server Jetty. http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty sembra un buon punto di partenza ...

+0

Grazie! Darò un'occhiata! L'unico problema è che non ho praticamente alcuna conoscenza di Java quindi trovo difficile capire un bel po 'di cosa si tratta. Ho solo bisogno di un server Java per dimostrare il mio cliente. Anche se in realtà sto pianificando di imparare Java l'anno prossimo in linea con il corso universitario che sto facendo! – IApp

+0

Sì, richiede una certa conoscenza di Java anche se può essere abbastanza semplice per semplici scenari di richiesta/risposta basati sul web. Penso che la risposta di Nissan Fan sia migliore per il tuo caso d'uso. – Philippe

+0

@ IApp - Per il progetto che hai descritto, non consiglio l'uso di alcun framework (Jetty è un framework). BACIO - Keep It Short & Simple. –