2012-07-05 3 views
0

Je suis nouveau à Socket et j'essaye de coder un serveur et un client sur la même application juste pour voir comment cela fonctionne.Socket - Adresse déjà utilisée

code:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ((Button)this.findViewById(R.id.bouton1)).setOnClickListener(this); 

} 


public void onClick(View v) { 
    TCPServer server = new TCPServer(); 
    TCPClient client = new TCPClient(); 
    server.start(); 
    client.start();  
} 

public class TCPServer extends Thread { 
    @Override public void run() { 

     try { 

      ServerSocket s = new ServerSocket(8080,0,InetAddress.getLocalHost()); 
      Socket cli = s.accept(); 

      byte[] b = new byte[512]; 
      int n; 

      InputStream is = cli.getInputStream(); 
      while((n=is.read(b))>0){ 
       Log.d("TCPServer",new String(b)); 
       if(new String(b).contains("\r\n\r\n"))break; 
       b = new byte[512]; 
      } 

      OutputStream os = cli.getOutputStream(); 
      os.write("Hello".getBytes()); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 



    } 
} 
public class TCPClient extends Thread {  
    @Override public void run() { 

     try { 
      Socket s = new Socket(InetAddress.getLocalHost().getHostAddress(),8080); 
      //Socket s = new Socket("www.google.com",80);        
      //Log.i("",s.getLocalAddress().getHostAddress()); 

      byte[] b = new byte[512]; 
      int n; 

      if (s.isConnected()) { 

       OutputStream os = s.getOutputStream(); 
       os.write("Hi How are you \r\n\r\n".getBytes()); 

       InputStream is = s.getInputStream(); 
       while((n=is.read(b))>0){ 
        Log.d("TCPClient",new String(b)); 
        b = new byte[512]; 
       } 

      } 

      s.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 
} 

Le travail de code bien mais juste pour la première fois que je clique sur mon bouton. l'erreur est java.net.BindException: Address already in use.

Répondre

0

Si cela fonctionne la première fois, mais pas après cela, il semble que vous ne fermez pas votre socket correctement avant que votre programme se termine.

Vous pouvez vérifier si elle est toujours ouverte en exécutant

netstat 

en attendant votre pas sur une machine Windows. Je suis sûr qu'ils ont quelque chose de similaire.

+0

Aie, je l'ai eu. J'ai oublié de fermer mon 'ServerSocket' – 113408

+1

netstat existe dans Windows –

+0

Doit appeler la méthode' ServerSocket' ** close() ** – 113408

0

Désolé je viens oublié de fermer la ServerSocket après l'ouvrir

Questions connexes