2017-11-01 7 views
1

スレッドを使ってJavaの練習をするには、助けが必要です。 私はこのプログラムが、クライアントが自分の名前とメッセージ時間で書いている情報を私に返すことを望んでいました。これは私が今のところ持っているコードです。 同じように、私は印刷するプログラムを手に入れることができないというメッセージを持っています。 ありがとう、助けていただければ幸いです。Javaソケットのヘルプクライアント - サーバ

サーバ

public class Servidor { 

public static void main(String[] args) { 

ServerSocket servidor; 
Socket conexion; 
DataOutputStream salida; 
DataInputStream entrada; 
int num = 0; 

try{ 

    //Vamos a crear un serverSocket en el puerto seleccionado 
    servidor = new ServerSocket(); 
    System.out.println("Servidor arrancado correctamente"); 

    while(true){ 

     //Se espera a la conexion de alguno de los clientes 
     conexion = servidor.accept(); 
     num++; 
     System.out.println("Conexión numero"+num+" desde: " + conexion.getInetAddress().getHostName()); 

     //Abrimos ahora los canales de entrada y salida 
     entrada = new DataInputStream(conexion.getInputStream()); 
     salida = new DataOutputStream(conexion.getOutputStream()); 

     //Vamos aleer el mensaje del cliente 
     String nombreCliente = entrada.readUTF(); System.out.println("Conexión n " +num+ " mensaje: "+ nombreCliente); 

     //Le respondemos al cliente 
     salida.writeUTF("Buenos días, " +nombreCliente+ ", Hoy es sábado, día de clase"); 
     conexion.close(); 
    } 
}catch (IOException e) { 
} 

CLIENT

public class Cliente { 

public static void main(String[] args) { 

    Socket cliente; 
    DataInputStream entrada; 
    DataOutputStream salida; 
    String mensaje, respuesta; 
    String nombreCliente; 

    try{ 
     //Vamos a crear el socket para conectarnos al puerto 5000 del servidor 
     cliente = new Socket(InetAddress.getLocalHost(),5000); 
     entrada = new DataInputStream(cliente.getInputStream()); 

     //Creamos los canales de entrada/salida 
     salida = new DataOutputStream(cliente.getOutputStream()); 
     mensaje = "Hola soy el cliente "; 
     nombreCliente = "Luis Salgado Manzano"; 


     //Enviamos el mensaje que queremos al servidor mediante esta instrucción 

     salida.writeUTF(nombreCliente); 

     //Leemos la respuesta 
     respuesta = entrada.readUTF(); 
     System.out.println(mensaje + nombreCliente); 
     System.out.println("Respuesta del servidor: " + respuesta); 


     //Cerramos la conexión 
     cliente.close(); 
    }catch (IOException e) { 
     System.out.println("Error: "+e.getMessage()); 
    } 
} 
} 
+0

クライアントは5000番ポートに接続しようとしますが、5000番ポートにバインドするサーバーコードのどこにも表示されません。 – jingx

答えて

0

あなたは何を得るServerSocket()のパラメータなしのコンストラクタを使用する場合は、未結合のインスタンスです。

  • ServerSocketコンストラクタ

  • bindメソッドの呼び出しを行い、その後パラメータなしのコンストラクタを使用しての呼び出しにポートの情報を提供します。あなたは2の選択肢があります。 javadocがこれについて説明しています。サーバーとポート番号の詳細をInetSocketAddressに入力する必要があります。 InetSocketAddress

2つの方法の違いは、第二はあなたに「localhostの」とどんなネットワークアダプタお使いのPCが持って区別する機会を与えることです。サーバーソケットの可視性をこれらの特定のものに制限することができます。明らかにそれは魔法ではなく、サーバーソケットを制御できない別のマシンのIPにバインドすることはできませんが、127.0.0.1または192.168.x.xにバインドするか、または使用するアダプタをバインドすることができます。

関連する問題