2010-01-23 7 views
1

J'ai codé un écouteur de socket qui devrait écouter sur les ports 80 et 81 et lorsque les données arrivent sur ces ports exécuter des opérations sur ces données. Je veux que cet auditeur écoute simultanément sur ces deux ports et ai codé de la façon suivante.Sockets Java avec exécution de threads

import java.net.*; 
    import java.io.*; 
    import java.text.DateFormat; 
    import java.text.SimpleDateFormat; 

    public class MultipleSocketServer implements Runnable { 

    private int a; 
    private ServerSocket connection; 
    private String TimeStamp; 
    private int ID; 
public static void main(String[] args){ 

     // System.out.print("ip"); 
    // String gh="12345"; 
     //System.out.println(gh.substring(1,3)); 
    int port = 80; 
    int port1 = 81; 
    int count = 0; 
    double a=234.52121; 

    //System.out.println(bf3.toString()); 
    try{ 

     ServerSocket socket1 = new ServerSocket(port); 
     ServerSocket socket2=new ServerSocket(port1); 
     System.out.println("MultipleSocketServer Initialized"); 
     Runnable runnable = new MultipleSocketServer(socket1, ++count); 
     Runnable run = new MultipleSocketServer(socket2, ++count); 
     Thread thread = new Thread(runnable); 
     Thread thread1 = new Thread(run); 
     while (true) { 
     //Socket connection = socket1.accept(); 

     thread.start(); 
     thread1.start(); 
     } 
    } 

    catch (Exception e) {} 
    } 
MultipleSocketServer(ServerSocket s, int i) { 
    this.connection = s; 
    this.ID = i; 
} 
public void run() { 
    while(true){ 


    try { 
     Socket incoming=connection.accept(); 


      BufferedInputStream is = new BufferedInputStream(incoming.getInputStream()); 
      int character; 
    while((character = is.read())!=-1) { 
    . 
    . 
    do the input data handling here 
    . 
    . 

    } 
    } 
    catch(Exception e){} 
    } 
    } 
} 

Mais pour une raison quelconque, cela ne semble pas indiquer le comportement thread/conncurrent. Je teste ce code en utilisant Hyperterminal, et chaque fois que je me déconnecte d'hyperterminal, l'exécution du programme s'arrête et l'exception "Socket is closed" est levée.

Les pointeurs seraient d'une grande aide

Vive

Répondre

1

Vous êtes fils à partir dans une boucle sans fin.

while (true) { 
    //Socket connection = socket1.accept(); 
    thread.start(); 
    thread1.start(); 
} 

Je pense cependant que cela est géré (ignoré) dans

} catch (Exception e) {} 

Cependant, je pense que le problème que vous décrivez est le code de traitement que vous n'avez pas inclus. Une idée plutôt évidente: vous n'appelez pas connection.close() au lieu de incoming.close(), n'est-ce pas?

+0

@sfussenegger: Merci, vous êtes un sauveur. Et en même temps, je ne peux pas croire ce que j'ai été. : D Résultat de plusieurs modifications à la structure du code, je suppose :) – ping