2016-04-24 17 views
1

私は依頼書Push 567を送っているクライアントコードを持っていて、私はサーバの番号を操作してクライアントに送り返しています。私のコードは、整数のサンプル数のために働いていますが、数字の文字列を含めるときに問題があります。プッシュ567.私はちょうど567を入れて、サーバプログラムの整数値を取り除くとうまくいきます。Javaの解析の問題 - サーバーからデータを受信する方法

編集:それはちょうど文字列または整数のために働いていますが、私はそれを解析しません。

クライアントコード

public class Client 
{ 
public static void main(String[] args) throws IOException 
{ 
Socket s=new Socket("127.0.0.1",1342); 
Scanner sc1=new Scanner(s.getInputStream()); 
    String req = "PUSH 567"; 

    PrintStream p = new PrintStream(s.getOutputStream()); 
    p.println(req); 

    int temp=sc1.nextInt(); 
    System.out.println(temp); 

} 
} 

Serverコード

public class NewServer 
    { 
    public static void main(String[] args) throws IOException 
    { 
    ServerSocket k=new ServerSocket(1342); 
    Socket ss=k.accept(); 
    Scanner sc=new Scanner(ss.getInputStream()); 

    String s = sc.next(); 
    int i = Integer.valueOf(s); 
    int temp=i+2; 

    PrintStream p=new PrintStream(ss.getOutputStream()); 
    p.println(temp); 

} 
} 

私はあなたが 'PUSH 567' を送っているが、あなたのサーバがあるかのようにコーディングされている

Exception in thread "main" java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at Tester.Client.main(Client.java:24) 
+0

を取得していますエラー入力に数字だけがありました。したがって、サーバーは 'NumberFormatException'で失敗している必要があります。これにより、何も送り返さずに終了し、クライアントの失敗を引き起こします。 – EJP

+0

文字列自体を印刷して何を得るかを調べてみてください – JavaHopper

+0

@ EJP私は解析が十分だと思いました。どのような変更が必要ですか? – Box

答えて

1
import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.PrintWriter; 
    import java.net.ServerSocket; 
    import java.net.Socket; 

    public class NewServer { 

     public static final void main(final String[] args) { 
     int portNumber = 1342; 

     try ( 
      ServerSocket serverSocket = new ServerSocket(portNumber); 
      Socket clientSocket = serverSocket.accept(); 
      PrintWriter out = 
       new PrintWriter(clientSocket.getOutputStream(), true); 
      BufferedReader in = new BufferedReader(
       new InputStreamReader(clientSocket.getInputStream())); 
     ) { 
      String s = "SERVER: Started."; 
      out.println(s); 
      while ((s = in.readLine()) != null) { 
       System.out.println("RECV: "+s); 
       String[] ss = s.split("PUSH\\s"); 
       out.println(Integer.parseInt(ss[1]) + 2 + ""); 
       System.out.println("SEND: " + Integer.parseInt(ss[1]) + 2); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     } 
    } 


import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.net.UnknownHostException; 

public class Client { 

    public static final void main(final String[] args) { 
    String hostName = "127.0.0.1"; 
    int portNumber = 1342; 

    try (
     Socket client = new Socket(hostName, portNumber); 
     PrintWriter out = new PrintWriter(client.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(
      new InputStreamReader(client.getInputStream())); 
    ) { 
     String fromServer = null; 
     client.setKeepAlive(true); 
     while ((fromServer = in.readLine()) != null) { 
     System.out.println(fromServer); 
     out.println("PUSH 567"); 
     } 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
} 
関連する問題