2009-03-24 12 views
0

J'utilise ce morceau de code qui expose une fonction simple à l'aide d'une prise:
une fonction à exposer d'autres processus

while (true) { 
    try { 
    ServerSocket serverSocket = new ServerSocket(7070); 
    Socket clientSocket = serverSocket.accept(); 
    String input = (new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))).readLine(); 
    synchronized (this.map) { 
     ObjectOutputStream o = new ObjectOutputStream(clientSocket.getOutputStream()); 
     o.writeChars(map.get(input)); 
     o.close(); 
    } 
    clientSocket.close(); 
    serverSocket.close(); 
    } catch(Exception e) { 
    e.printStackTrace(); 
    } 
} 



Qu'est-ce que je fais mal? la consignation montre qu'il est bloqué dans la ligne de réception d'entrée et il émet parfois une exception disant que le socket est en cours d'utilisation

Répondre

2

Pour commencer, vous créez le ServerSocket [i] dans [/ i] la boucle, qui est évidemment pas ce que tu veux. Vous voulez seulement le créer une fois, puis avoir une boucle qui lit constamment depuis les sockets. ReadLine() est bloqué parce que vous avez oublié de vider le flux de sortie de l'expéditeur (l'autre processus)

1

Lorsque vous travaillez avec des sockets, l'ordinateur mettra en mémoire tampon certaines données (généralement 4 Ko) car l'envoi de petites quantités de données sur le réseau est coûteux. Par conséquent, si vous avez moins de données, vous devez le dire "envoyer maintenant".