2016-10-06 3 views
0

이 프로그램을 실행하면 Client 클래스는 사용자에게 명령을 입력하라는 메시지를 표시하고 해당 명령은 Server 클래스로 이동하여 파일을 열고 해당 파일의 각 행을 읽고 바이트 길이 표시 할 Client 클래스로 돌아갑니다.JAVA TCP 클라이언트 - 서버 연결

불행히도 명령을 입력하면 아무 일도 일어나지 않습니다. & 이유가 확실하지 않습니다.

package TcpServer; 

import java.io.BufferedReader; 
import java.io.*; 
import java.io.InputStreamReader; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class TcpServer { 
    public static void main(String[] args) { 
    // The name of the file to open. 
    String fileName = "input.txt"; 
    // This will reference one line at a time 
    String line = null; 
    String holder=null; 
    String clientWord; 
    int bytNumber; 

    try { 
     //create welcoming socket at port 5555 
     ServerSocket welcomeSocket = new ServerSocket(5555); 
     //wait, on welcoming socket for contact by client 
     Socket connectionSocket = welcomeSocket.accept(); 
     //create input stream, attached to socket 
     BufferedReader inFromClient = 
     new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
     //create output stream, attached to socket 
     DataOutputStream outToClient = 
     new DataOutputStream(connectionSocket.getOutputStream()); 
     //read in line from socket 
     clientWord = inFromClient.readLine(); 

     if(clientWord.equals("query")) { 
     try { 
      // FileReader reads text files in the default encoding. 
      FileReader fileReader = new FileReader(fileName); 

      // Always wrap FileReader in BufferedReader. 
      BufferedReader buffer = new BufferedReader(fileReader); 

      while((line = buffer.readLine()) != null) { 
      System.out.println(line); 
      bytNumber = line.getBytes().length; 
      holder=Integer.toString(bytNumber); 
      //pr.println(bytNumber);//only printing first line not going until eof 
      outToClient.writeBytes(holder); 
      // line = buffer.readLine(); 
      // pr.flush(); 
      } 

      // Always close files. 
      buffer.close();   
     } 
     catch(FileNotFoundException ex) { 
      System.out.println("Unable to open file '" + fileName + "'"); 
     } 
     catch(IOException ex) { 
      System.out.println ("Error reading file '" + fileName + "'"); 
      // Or we could just do this: 
      // ex.printStackTrace(); 
     } 
     }// end if statement 
    } 
    catch(Exception ex) { 
    } 
    } 
} 
+1

당신은으로 시작할 것 **하지 ** 클라이언트 클래스에서 무시 예외. 오류 메시지를 무시하면 디버깅의 좋은 방법은 없습니다. – GhostCat

+0

유일한 메시지는 clientSocket을 닫기위한 경고입니다.하지만 그렇게했을 때 나는 여전히 동일한 출력을 얻습니다. – n00bie1221

+0

여기 저기에 소켓을 제대로 닫지 않거나 연결 문제 등 다양한 문제가있을 수 있습니다. 힌트 : 디버거에서 실행 해보십시오. 인쇄 문을 추가하여 현재 진행중인 작업을 확인하십시오. 먼저 클라이언트/서버 통신의 전체 과정을 안내하는 단계별 자습서 (예 : http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html)를 읽으십시오. – GhostCat

답변

1

TCP 클라이언트 클래스

package TcpClient; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.Socket; 
import java.io.*; 

public class TcpClient { 
    public static void main(String[] args) { 
    String temp; 
    String displayBytes; 
    try { 
     //create input stream 
     BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 
     //create client socket, connect to server 
     Socket clientSocket = new Socket("localhost",5555); 
     //create output stream attached to socket 
     DataOutputStream outToServer = 
     new DataOutputStream(clientSocket.getOutputStream()); 

     System.out.print("Command : "); 

     //create input stream attached to socket 
     BufferedReader inFromServer = 
     new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

     temp = inFromUser.readLine(); 

     //send line to server 
     outToServer.writeBytes(temp); 

     //read line from server 
     //displayBytes = inFromServer.readLine(); 

     while((displayBytes = inFromServer.readLine()) != null) { 
     System.out.print(displayBytes); 
     } 
     //clientSocket.close(); 
    } 
    catch(Exception ex) { 
    } 
    } 
} 

TCP 서버 클래스 I 양쪽에만 DataOutputStreamDataInputStream에 당신을 제안하고 BufferedInputStream를 사용하지. 아래의 약간 수정 된 코드는 클라이언트에서 서버로 메시지를 올바르게 보낼 수 있습니다. 이제 당신이 원하는 것을 쉽게 작동시킬 수 있습니다.

서버

import java.io.BufferedReader; 
import java.io.*; 
import java.io.InputStreamReader; 
import java.net.ServerSocket; 
import java.net.Socket; 



public class TcpServer { 


public static void main(String[] args) { 
    // The name of the file to open. 
    String fileName = "input.txt"; 
    // This will reference one line at a time 
    String line = null; 
    String holder=null; 
    String clientWord; 
    int bytNumber; 

    try 
    { 
     //create welcoming socket at port 5555 
     ServerSocket welcomeSocket = new ServerSocket(5555); 
     //wait, on welcoming socket for contact by client 
     Socket connectionSocket = welcomeSocket.accept(); 
     //create input stream, attached to socket 
     DataInputStream inFromClient = 
       new DataInputStream(connectionSocket.getInputStream()); 
     //create output stream, attached to socket 
     DataOutputStream outToClient = 
       new DataOutputStream(connectionSocket.getOutputStream()); 
     //read in line from socket 
     clientWord = inFromClient.readUTF(); 
    System.out.println(clientWord); 

     if(clientWord.equals("query")) 
     { 


      try 
      { 
     // FileReader reads text files in the default encoding. 
     FileReader fileReader = new FileReader(fileName); 


     // Always wrap FileReader in BufferedReader. 
     BufferedReader buffer = new BufferedReader(fileReader); 


       while((line = buffer.readLine()) != null) 
       { 
      System.out.println(line); 
      bytNumber = line.getBytes().length; 
      holder=Integer.toString(bytNumber); 
      //pr.println(bytNumber);//only printing first line not going until eof 
      outToClient.writeBytes(holder); 
      // line = buffer.readLine(); 
      // pr.flush(); 
       } 

     // Always close files. 
     buffer.close();   
      } 
      catch(FileNotFoundException ex) 
      { 
     System.out.println(
      "Unable to open file '" + 
      fileName + "'");     
      } 
      catch(IOException ex) 
      { 
     System.out.println(
      "Error reading file '" 
      + fileName + "'");     
     // Or we could just do this: 
     // ex.printStackTrace(); 
      } 

     }// end if statement 
    } 

    catch(Exception ex) 
    { 

    } 
} 

} 

클라이언트

import java.io.BufferedReader; 
    import java.io.InputStreamReader; 
    import java.net.Socket; 
    import java.io.*; 


    public class TcpClient { 


     public static void main(String[] args) { 
     String temp; 
     String displayBytes; 
     try 
     { 
     //create input stream 
     BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 
     //create client socket, connect to server 
     Socket clientSocket = new Socket("localhost",5555); 
     //create output stream attached to socket 
     DataOutputStream outToServer = 
       new DataOutputStream(clientSocket.getOutputStream()); 



     System.out.print("Command : "); 

     //create input stream attached to socket 
     DataInputStream inFromServer = new DataInputStream(clientSocket.getInputStream()); 

     temp = inFromUser.readLine(); 

     //send line to server 
     //outToServer.writeBytes(temp); 
     outToServer.writeUTF(temp); 
     outToServer.flush(); 


     //read line from server 
     //displayBytes = inFromServer.readLine(); 

     while((displayBytes = inFromServer.readUTF()) != null) 
     { 
     System.out.print(displayBytes); 
     } 
     //clientSocket.close(); 
    } 
    catch(Exception ex) 
    { 

    } 
} 
}