2015-01-26 4 views
0

적어도 클라이언트에서 서버로 두 개의 메시지를 보내려고하고 서버가이 메시지에 응답합니다. 그러나 단 하나의 메시지는 클라이언트에서 전송하고, 서버는 하나 내가 잘못입니다 어떤 생각을 응답이 내 server.java루프 내의 클라이언트 서버 메시지

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class server 
{ 

    private static Socket socket; 

    public static void main(String[] args) 
    { 
     try 
     { 

      int port = 25000; 
      ServerSocket serverSocket = new ServerSocket(port); 
      System.out.println("Server Started and listening to the port 25000"); 

      //Server is running always. This is done using this while(true) loop 
      while(true) 
      { 
       //Reading the message from the client 
       socket = serverSocket.accept(); 

       InputStream is = socket.getInputStream(); 
       InputStreamReader isr = new InputStreamReader(is); 
       BufferedReader br = new BufferedReader(isr); 
       String sub = br.readLine(); 

       //string parsing 
       String delims = "[.]"; 
       String[] tokens = sub.split(delims);  
       System.out.println("You have subscribed to "+tokens[1]); 
       String returnMessage="Subscription message received."; 

       //Sending the response back to the client. 
       OutputStream os = socket.getOutputStream(); 
       OutputStreamWriter osw = new OutputStreamWriter(os); 
       BufferedWriter bw = new BufferedWriter(osw); 
       bw.write(returnMessage); 
       System.out.println("Message sent to the client is "+returnMessage); 
       bw.flush(); 

       InputStream iss = socket.getInputStream(); 
       InputStreamReader isrr = new InputStreamReader(iss); 
       BufferedReader brr = new BufferedReader(isrr); 
       String subb = brr.readLine(); 
       System.out.println("Regular message received from client is "+subb); 



       OutputStream oss = socket.getOutputStream(); 
       OutputStreamWriter osww = new OutputStreamWriter(oss); 
       BufferedWriter bww = new BufferedWriter(osww); 
       bww.write(subb); 
       System.out.println("Message sent "+subb); 
       bww.flush(); 


      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      try 
      { 
       socket.close(); 
      } 
      catch(Exception e){} 
     } 
    } 
} 

입니다 그리고 이것은 내 client.java

import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.InputStream; 
    import java.io.InputStreamReader; 
    import java.io.OutputStream; 
    import java.io.OutputStreamWriter; 
    import java.net.InetAddress; 
    import java.net.Socket; 

    public class client 

    { 

    private static Socket socket; 

    public static void main(String args[]) 
    { 
     try 
     { 
      String host = "localhost"; 
      int port = 25000; 
      InetAddress address = InetAddress.getByName(host); 
      socket = new Socket(address, port); 

      //Send the subscription message to the server 
      OutputStream os = socket.getOutputStream(); 
      OutputStreamWriter osw = new OutputStreamWriter(os); 
      BufferedWriter bw = new BufferedWriter(osw); 

      String subscribe= "Subscribe.nust"; 
      String sendMessage = subscribe + "\n"; 
      bw.write(sendMessage); 
      bw.flush(); 
      System.out.println("Message sent to the server : "+sendMessage); 

      //Get the return message from the server 
      InputStream is = socket.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(is); 
      BufferedReader br = new BufferedReader(isr); 
      String message = br.readLine(); 
      System.out.println("Message received from the server : " +message); 

      //Send the regualar message to the server 
      OutputStream oss = socket.getOutputStream(); 
      OutputStreamWriter osww = new OutputStreamWriter(oss); 
      BufferedWriter bww = new BufferedWriter(osww); 

      String regular= "Because of the APS Peshawar attack that took place on 16th December 2014, nust is facing security issues."; 
      String sendMessage2 = regular + "\n"; 
      bww.write(sendMessage2); 
      bww.flush(); 
      System.out.println("Message sent to the server : "+sendMessage2); 

      //Get the return message from the server 
      InputStream iss = socket.getInputStream(); 
      InputStreamReader isrr = new InputStreamReader(iss); 
      BufferedReader br1 = new BufferedReader(isrr); 
      String msg = br1.readLine(); 
      System.out.println("Message received from the server : " +msg); 

     } 
     catch (Exception exception) 
     { 
      exception.printStackTrace(); 
     } 
     finally 
     { 
      //Closing the socket 
      try 
      { 
       socket.close(); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+0

'returnMessage'에 줄 종결자가 누락 되었습니까? –

답변

0

입니다 같은 소켓에 새로운 BufferedReaders/Writers을 계속 생성하지 마십시오. 소켓 수명 동안 동일한 것을 사용하십시오. 버퍼에서 데이터를 잃어 버리는 중입니다.