2010-02-13 6 views
0

je l'hôte suivantjava client tcp et le serveur

package clserver; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Scanner; 


public class Main { 
//instance vars 
static ServerSocket sSocket = null; 
static int serverPort = 0; 
static Socket cSocket = null; 
static PrintWriter out = null; 
static BufferedReader in = null; 


public static void main(String[] args) throws IOException { 
     System.out.println("\n\n\nTCP Server Client\n\nEnter port number:"); 
     Scanner scan = new Scanner(System.in); 
     serverPort = scan.nextInt(); 
     try { 
      //connect server to port 
      sSocket = new ServerSocket(serverPort); 
     } catch (IOException ex) { 
      System.err.println("That port is busy"); 
     } 
     try { 
      //accept client connection 
      cSocket = sSocket.accept(); 
     } catch (IOException ex) { 
      System.err.println("Connection failed"); 
     } 

     out = new PrintWriter(cSocket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(cSocket.getInputStream())); 

     System.out.println(in.readLine()); 

     } 
} 

et ce code client

package clclient; 

import java.io.*; 
import java.net.*; 
import java.net.UnknownHostException; 
import java.util.Scanner; 
import java.util.logging.Level; 
import java.util.logging.Logger; 


public class Main { 

    //instance vars 
    static Socket cSocket =null; 
static PrintWriter out = null; 
static BufferedReader in = null; 

//server info 
static String serverName = null; 
static int serverPort = 0; 


public static void main(String[] args) { 
    try { 
     System.out.println("\n\n\nTCP Chat Client\nEnter server name:"); 
     Scanner scan = new Scanner(System.in); 
     //get server info from user 
     serverName = scan.nextLine(); 
     System.out.println("\nEnter port number:"); 
     serverPort = scan.nextInt(); 
     //make connection to server 
     cSocket = new Socket(serverName, serverPort); 
     out = new PrintWriter(cSocket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(cSocket.getInputStream())); 
    } catch (UnknownHostException ex) { 
     System.err.println("\ncan't find that host\n"); 

    } catch (IOException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    String nm = "testing"; 
    out.print(nm); 


} 

}

Je suis en train d'envoyer des messages et-vient entre eux, mais quand je envoyer un message l'hôte se bloque. Il jette l'exception java.net.SocketException: connexion réinitialisée

+0

... et quelle exception est-ce qu'il se produit lorsqu'il se bloque? – Marius

+0

Il jette l'exception Java.net.SocketException: connexion réinitialisée – n0ob

+0

Quel port utilisez-vous? –

Répondre

1

Je ne l'ai pas utilisé les sockets Java pendant un certain temps, mais les correctifs suivants sur ma machine:

Dans le client, appelez out.println(nm) au lieu de out.print(nm).

Je pense que cela peut avoir quelque chose à voir avec le rinçage automatique, où println autoflushes mais print ne le fait pas. Encore, pas sûr du haut de ma tête pourquoi print provoquerait une exception Socket.

Edit: vous devriez vraiment faire tout avec les douilles dans un try, et ont un finally qui appelle close() sur les sockets.

+0

qui fait effectivement le réparer sur ma machine aussi, mais je ne comprends pas pourquoi – n0ob

2

Non. print() envoie juste les données. println() envoie les données et un terminateur de ligne. readLine() bloque jusqu'à ce qu'un terminateur de ligne soit reçu. Donc, quelque part le long de la ligne, vous devez appeler println(), ou envoyer un terminateur de ligne d'une autre manière.