2016-11-09 9 views
-1

자바 소켓으로 작은 예제를 만들려고합니다. 그러나 나는 그것을 작동하게 만들 수 없다. 서버는 클라이언트의 청원을 올바르게받습니다. 하지만 문제는 서버에 "hello"문자열을 보내려고 할 때입니다.자바 소켓 서버와 소켓 클라이언트 사이의 연결

디버깅 할 때 서버의 InputStream이 null이므로 아무 것도 인쇄하지 않습니다. 나는 문제가 어쩌면 내가 BufferedWriter의 같은 다른 클래스와 노력, 다른 클래스를 사용해야의 PrinterWriter에있을 것 같아요,하지만 난이 일을 만들 수 없습니다 여기

내 코드

서버

입니다 사전에
public class ServidorFechaHora { 

    static final int port = 5000; 
    static String line; 

    public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 
     ServerSocket ss = new ServerSocket(port); 
     while (true) { 
      /* accept nos devuelve el Socket conectado a un nuevo cliente. 
      Si no hay un nuevo cliente, se bloquea hasta que haya un 
      nuevo cliente. 
      */ 
      Socket soc = ss.accept(); 
      System.out.println("Cliente conectado"); 
      // Obtenemos el flujo de entrada del socket 
      InputStream is = (InputStream) soc.getInputStream(); 
      //Función que llevaría a cabo el envío y recepción de los datos. 
      processClient(is); 
     } 
    } 

    private static void processClient(InputStream is) throws IOException { 
     // TODO Auto-generated method stub 
     BufferedReader bis = new BufferedReader(new InputStreamReader(is)); 

     while ((line = bis.readLine()) != null){ 
      System.out.println(line); 
     } 

     bis.close(); 
    } 

} 

클라이언트

public class ClienteFechaHora { 
    public static void main(String[] args) throws IOException, InterruptedException { 
     Socket client = null; 
     PrintWriter output = null; 
     //BufferedOutputStream out = null; 
     DateFormat hourdateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 

     try { 
       client = new Socket("127.0.0.1", port); 
       output = new PrintWriter(client.getOutputStream(), false); 

       while (true) { 
        System.out.println("Enviando datos..."); 
        output.write("hello"); 
        output.flush(); 
        Thread.currentThread().sleep(2000); 
        //System.out.println("Fecha y hora: " + hourdateFormat); 
       } 
     } 
     catch (IOException e) { 
      System.out.println(e); 
     } 
     output.close(); 
     client.close(); 
    } 
} 

감사합니다!

+0

에 클라이언트를 변경

시도의 InputStream

"바이트 지향"하고 확장하는의 InputStream으로 데이터를 가져 오기 위해 시도 내 더미 클라이언트가 작동 중입니다. –

+0

서버의 입력 스트림이 null이 아닙니다. 네가 묻고있는 것이 불분명하다. – EJP

+0

EJP 내가 클라이언트에서 서버로 문자열 "안녕하세요"를 보내려하고 "processClient"라는 서버 메소드에 표시하려고했다. 나는 설명이나 코드를 읽으려고하는 것이 무엇인지 분명하게 생각한다. 나에게 부정적인 점을주지 말고 다음 번에 더주의 깊게 읽으십시오. :) – Javi

답변

1

서버는 소켓에서 한 줄 한 줄을 읽고 다음과 같이

BufferedReader bis = new BufferedReader(new InputStreamReader(is)); 

while ((line = bis.readLine()) != null){ 
    System.out.println(line); 
} 

BufferedReader.readLine()이 설명되어 있습니다

는 한 줄의 텍스트를 읽습니다. 한 줄은 줄 바꿈 ('\ n'), 캐리지 리턴 ('\ r') 또는 캐리지 리턴 다음에 바로 줄 바꿈으로 끝나는 것으로 간주됩니다.

그래서 줄 끝 기호를 읽을 때까지 반환되지 않습니다.

반면에 당신의 클라이언트가 단지 줄 끝없이 문자열 "안녕하세요"를 쓰고있다 :

output.write("hello"); 
output.flush(); 

서버에서 텍스트의 라인을 읽고 싶다면, 당신은이 라인을 보낼 수 클라이언트에서 (줄 끝 포함) 텍스트 :

output.write("hello\n"); 
output.flush(); 
-1

귀하의 문제는의 PrintWriter는 작가 클래스를 확장하는 "문자 지향" 스트림이라고 보인다. 그리고 서버에 당신은 내가 단지와 서버를 확인

in = new BufferedReader (new InputStreamReader (sock. getInputStream()); 
관련 문제