2013-02-26 4 views
3

Je crée un client de chat simple pour le plaisir, j'ai le serveur/client qui travaille et envoie des données parfaitement. Je voudrais savoir comment je peux envoyer des données à des utilisateurs sélectionnés. La partie de sélection que je peux travailler, mais je ne sais pas comment envoyer des choses aux adresses IP sélectionnées. Voici mon serveur jusqu'à présent.Java, Envoi de données vers différentes adresses IP

package Server; 

import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 

/** 
* @class Connect 
* @date Feb 25, 2013 10:14:00 PM 
* @author Zach 
*/ 

public class Connect { //Server 
    public static void main(String[] args) throws IOException { 
     ServerSocket server = new ServerSocket(43595); 

     while (server.isBound()) { 

      Socket s = server.accept(); 
      DataOutputStream out = new DataOutputStream(s.getOutputStream()); 
      DataInputStream in = new DataInputStream(s.getInputStream()); 

      int length = in.read(); 
      byte[] data = new byte[length]; 
      in.read(data); 
      String str = new String(data, "UTF-8"); 

      s.close(); 
     } 
    } 
} 

Je veux rediriger les informations hors du serveur à un client spécifique

Répondre

1

Faire un tableau de prises acceptées, dans votre cas de Socket, vous pouvez alors en boucle « s » pour trouver quel client à envoyer des données à.

+0

Je veux être en mesure d'envoyer à n'importe quel ip, cela fonctionnerait-il encore? – zfollette

+0

Oui, vous pouvez, après avoir reçu des données, simplement boucler le tableau et l'envoyer à tous les clients connectés (en utilisant le tableau que je vous ai dit) –

+0

Probablement un 'List', ou un' Map', serait une meilleure option, comme le tableau suppose une taille fixe. – afsantos

0

Faire une classe qui gère chaque client:

public class ClientHandler { 

Socket connection; 
DataInputStream in; 
DataOutputStream out; 

public ClientHandler(Socket s) { 
    connection = s; 
} 
public void startup() throws IOException { 
    in = new DataInputStream(connection.getInputStream()); 
    out = new DataOutputStream(connection.getOutputStream()); 
    out.flush(); 
} 

public void sendMessage(byte[] message) throws IOException { 
    out.write(message); 
} 

} 

Mettez une liste dans votre serveur et attribuer un identifiant à chaque ClientHandler, vous pouvez parcourir votre liste et si les résultats d'identification, utilisez sendMessage() sur le client.

Je vous recommande d'utiliser des tampons pour l'entrée et la sortie car ils sont plus efficaces. Je vous recommande également d'utiliser des threads dans votre classe de serveur, en particulier si vous gérez plusieurs clients.

+0

Il est recommandé d'ouvrir 'OutputStream' en premier, lors de l'utilisation des sockets. – afsantos

Questions connexes