2015-02-22 3 views
0

Я пытался написать клиентский процесс, который будет связываться с сервисом.Программирование Java Socket с TCP не работает

Я использовал тот же код ниже, но вместо сканера я использовал BufferedReader, а клиентский вход был строкой. Кроме того, сервер просто изменяет строку на верхний регистр и отправляет ее обратно клиенту, который будет отображаться на экране. Это сработало.

Однако, когда я изменил код, чтобы клиент мог ввести двойной номер [(например: 1.6), сервер должен его округлить и отправить обратно, чтобы он был напечатан на экране], я не получаю ответ.

И я получил эту ошибку:

run: 
Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Scanner.java:864) 
    at java.util.Scanner.next(Scanner.java:1485) 
    at java.util.Scanner.nextDouble(Scanner.java:2413) 
    at socketserver.SocketServer.main(SocketServer.java:38) 
Java Result: 1 

примечания:

  1. Я использую NetBeans.
  2. Я использовал Сканер вместо использования BufferedReader, чтобы я мог прочитать двойной номер.

Client класс

package socketclient; 

import java.io.*; 
import java.net.*; 
import java.util.Scanner; 


public class SocketClient { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) throws Exception 
    { 
     double inputDouble; 
     double modifiedNum; 

     Scanner inFromUser = new Scanner(System.in); 


     Socket clientSocket = new Socket("localhost", 6789); 

     DataOutputStream outToServer = 
      new DataOutputStream(clientSocket.getOutputStream()); 


      Scanner inFromServer = new Scanner(clientSocket.getInputStream()); 


     inputDouble = inFromUser.nextDouble(); 

     outToServer.writeDouble(inputDouble); 


     modifiedNum = inFromServer.nextDouble(); 

     System.out.println("FROM SERVER: " + modifiedNum); 

     outToServer.close(); 
     clientSocket.close(); 

    } 

} 

класс Сервер

package socketserver; 

import java.io.*; 
import java.net.*; 
import java.util.Scanner; 


public class SocketServer { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) throws Exception 
    { 
     double clientNum; 
     double roundedNum; 

     ServerSocket welcomeSocket = new ServerSocket(6789); 

     while(true) { 

      Socket connectionSocket = welcomeSocket.accept(); 

      Scanner inFromClient = new Scanner(connectionSocket.getInputStream()); 


      DataOutputStream outToClient = 
      new DataOutputStream(connectionSocket.getOutputStream()); 

      clientNum = inFromClient.nextDouble(); 


      roundedNum= Math.round(clientNum); 


      outToClient.writeDouble(roundedNum); 
     } 
    } 


} 
+1

Следуйте за этим тетом http://www.tutorialspoint.com/java/java_networking.htm – Apurva

+0

@Apurva спасибо вам, это полезно. Тем не менее, я хочу знать, что именно я сделал неправильно. – Sarah

ответ

1

Ваша ошибка заключается в использовании Scanner читать данные, отправленные клиентом с сервера и обратное.

Вы используете DataOutputStream для отправки double, чтобы вам нужно было DataInputStream, чтобы прочитать double; с обеих сторон.

Изменить Scanner s на DataInputStream на inputFromServer и inputFromClient. Также не забудьте указать flush ваши выходы и close потоки в конце.

+0

Спасибо за объяснение! и это сработало! – Sarah

Смежные вопросы