Ho questo client:
codice:
import java.net.*;
import java.io.*;
/**
* Classe che implementa l'invio e la ricezione dei messaggi
* @author
* @version 1.0
*
*/
public class ClientChat
{
private OutputStream os;
private InputStream is;
private Socket s;
private boolean close=true;
/**
* Metodo che mi permette di ricevere l'url da cui mi sono connesso
* per evitare di immetere l'indirizzo del server
*
* @param u l'url di ricezione
*/
public static void main(String args[]){ //QUI AVVIO IL SERVER ATTRAVERSO IL METODO START()
ClientChat clientChat = new ClientChat();
try
{
clientChat.start();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public void start() throws UnknownHostException,IOException
{
//Connessione della Socket con il Server
Socket s= new Socket();
s.connect(new InetSocketAddress("192.168.1.177", 7777));
//Stream di byte da passare al Socket
InputStream is = s.getInputStream();
OutputStream os=s.getOutputStream();
close=false;
//}catch(Exception e){}
}
/**
* Metodo per l'invio del messaggio
*
* @param strMessage Testo contenente il messaggio
*/
public void sendMessage(String strMessage) throws IOException
{
os.write(strMessage.getBytes());
}
/**
* Metodo per la ricezione del messaggio
*
* @return restituisce il messaggio appena ricevuto
*/
public void receiveMessage() throws IOException
{
is.read();
}
/**
* Metodo che chiude tutti gli oggetti di tipo stream e la Socket
*/
public void close() throws IOException
{
os.close();
is.close();
s.close();
close=true;
}
/**
* Metodo che ritorna il valore della variabile close
*
* @return valore della variabile booleana
*/
public boolean isClosed()
{
return close;
}
}
e questo server:
codice:
import java.net.*;
import java.io.*;
import java.util.ArrayList;
/**
* Questa classe ? il vero e proprio server,
* accetta le connessioni dai client e comunica
*
* @author
* @version 1.0
*/
public class ServerChat
{
public static void main(String args[]){ //QUI AVVIO IL SERVER ATTRAVERSO IL METODO START()
ServerChat serverChat = new ServerChat();
try
{
serverChat.start();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
private ServerSocket serverSocket;
int clientPort;
private static ArrayList<Socket> clients;
private static ArrayList<String> nicks;
/**
* Metodo che avvia il server ed inizializza tutte le variabili
*/
public void start() throws IOException
{
clients = new ArrayList();
nicks = new ArrayList();
Socket client;
serverSocket = new ServerSocket(7777);
getServerInfo();
//ciclo infinito in ascolto di client
while (true)
{
client = startListening();
clients.add(client);//aggiunge alla lista "clients" eventuali client
getClientInfo(client); //ottiene info sul client attraverso il relativo metodo
//creo un thread per ogni client connesso
startListeningClient(client);
}
}
/**
* Metodo che rimane in ascolto di eventuali connessioni
* @return ritorna la socket di connessione del client
*/
public Socket startListening() throws IOException{
System.out.println("In attesa di connessioni...");
return serverSocket.accept();//il server resta in ascolto sulla porta specificata
}
/**
* Metodo che permette di visualizzare le informazioni relative al server
*/
public void getServerInfo()
{
// Informazioni sul Server in ascolto
InetAddress indirizzo = serverSocket.getInetAddress(); //effettua il dns( traduce gli indirizzi numerici in nome,quando possibile)
String server = indirizzo.getHostAddress(); //Restituisce il nome dell'host che corrisponde all'indirizzo IP dell'InetAddress(indirizzo) - se non viene
//trovato un nome viene restituito l'indirizzo ip numerico
int port = serverSocket.getLocalPort(); //restituisce il numero della porta del server
System.out.println("In ascolto Server: " + server + " porta: " + port);
}
/**
* Metodo che permette di visualizzare le informazioni relative
* del client connesso
*
* @param client socket del client dalla quale estrarre estrarre le informazioni
*/
public void getClientInfo(Socket client)
{
// Informazioni sul client che ha effettuato la connesione
InetAddress address = client.getInetAddress();
String clientInfo = address.getHostName();
clientPort = client.getPort();
System.out.println("In connessione Client: " + clientInfo + " porta: "+ clientPort);
}
/**
* Creazione del thread per la ricezione dei messaggi
*
* @param client Socket del client appena connesso
*/
private void startListeningClient(Socket client){
Thread t=new Thread(new ListeningThread(client));
t.start();
}
/**
* Metodo per il controllo dell'esistenza di un nickname
* in caso contrario viene accettato il nickname inserito
* ed iscritto il nuovo client
*
* @param username il nick del client appena connesso
*/
public static synchronized boolean checkUserNicks(String username)
{
boolean exist=nicks.contains(username);
if(!exist)
{
nicks.add(username);
}
return exist;
}
/**
* Controllo dell'esistenza di un utente in modo da poter inoltrare il messaggio
*
* @param username il nick da controllare
* @return valore booleano sull'esistenza di un determinato username
*/
public static boolean checkUser(String username)
{
return nicks.contains(username);
}
/**
* Metodo che ricerca la Socket di connessione del nick che vogliamo
*
* @param nick il nick name di cui si vuole trovare la socket
* @return la socket dello specifico client
*/
public static Socket getSocketClient(String nick)
{
return clients.get(nicks.indexOf(nick));
}
/**
* recupero tutti i client connessi
*
* @return i nick name di tutti i client connessi
*/
public static String getAllClient()
{
String allClient="";
for (int i = 0; i < nicks.size(); i++)
{
allClient+="~"+nicks.get(i);
}
return allClient;
}
/**
* Metodo per rimuovere un client che si ? disconnesso
*
* @param nick il nick name del client da disconnettere
*/
public static synchronized void disconnectClient(String nick) throws IOException
{
int indexToRemove=nicks.indexOf(nick);
nicks.remove(indexToRemove);
clients.remove(indexToRemove);
}
/**
* Metodo che restituisce l' arraylist dei client
*/
public static ArrayList getAllSocketClient()
{
return clients;
}
/**
* Metodo che elimina l'ultimo client connesso
*/
public static synchronized void deleteLastClient()
{
clients.remove((clients.size()-1));
}
}//end class
possono andare? c'è qualcosa di sbagliato? lanciandoli non riesco a capirlo