2017-05-05 11 views
3

クライアントからObjectOutputStreamおよびWriteObjectメソッドを使用して整数配列を送信しようとしています。ここでは、それぞれクライアントとサーバーのコードです:Javaソケットから送信するときにInteger配列にブランク文字列が追加される

クライアント:

int numberArray [] = new int[]{3,6,1,5,8}; 
ObjectOutputStream os =new ObjectOutputStream(socket.getOutputStream()); 
os.writeObject(numberArray); 

サーバー:

ObjectInputStream is = new ObjectInputStream(socket.getInputStream()); 
int[] Array = (int[])is.readObject(); 
for (int e : Array) { 
System.out.print(e + " "); 
} 

クライアントが正常に配列を送信することができます。しかし、私は次のようなエラーが発生し、プログラムが終了配列を読み込むしようとしているとき:

3 6 1 5 8 
Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:592) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at testserver.TestServer.main(TestServer.java:73) 
Java Result: 1 

私が間違ってやっているところ誰もが私を伝えることができますしてください?

+0

は、それはあなたがより多くのコードを投稿することは可能ですか?私はあなたがこれまでに持っていたことをテストし、例外はありません。 – tima

+0

これを再現できるように[mcve]を入力してください。あなたのコードから 'parseInt'を呼び出しているようですが、あなたはそれを表示していません...(私はあなたが現在の質問から5つのアップフォートをどのように得たかはわかりません...) –

答えて

0

私のアンドロイドスタジオやNetbeansで何が起きたのか分かりません。私はコードを新しく新しいプロジェクトに書いたが、今はうまくいっている!! ここに私の完全なコードです。前回のシンプルさについては、コード全体を投稿していませんでした。

しかし、クライアントコードでは、印刷方法のみを使用するとコンソールに出力はありませんが、printlnメソッドを使用すると、コンソールの内容が印刷されます。誰がなぜこれが起こっているのか説明できますか?

サーバー

package testserver; 

import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.net.InetAddress; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class TestServer { 

     public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException { 
     ServerSocket listener; 
     InetAddress addr = InetAddress.getLocalHost(); 
     listener = new ServerSocket(9090,50,addr);   
     try { 
      System.out.println("Waiting for Client...!!!"); 
      while (true) { 
       Socket socket = listener.accept(); 
       try { 
        ObjectInputStream is = new ObjectInputStream(socket.getInputStream()); 
        int[] Array = (int[])is.readObject(); 
        for (int e : Array) { 
         System.out.print(e + " "); 
        } 

        ObjectOutputStream os =new ObjectOutputStream(socket.getOutputStream()); 
        os.writeObject(Array); 
       } finally { 
        socket.close(); 
       } 
      } 
     } 
     finally { 
      listener.close(); 
     } 
    } 
} 

クライアント

package com.example.asus.clientwitharray; 

import android.os.AsyncTask; 
import android.util.Log; 
import android.widget.TextView; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.net.Socket; 
import java.net.UnknownHostException; 

public class Client extends AsyncTask<Void, Void, Void> { 
    String dstAddress; 
    int dstPort; 
    String response =""; 
    TextView textResponse; 

    Client(String addr, int port, TextView textResponse) { 
     dstAddress = addr; 
     dstPort = port; 
     this.textResponse = textResponse; 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 

     Socket socket = null; 
     try { 
      socket = new Socket(dstAddress, dstPort); 
      int numberArray [] = new int[]{2,4,6,1,9}; 
      ObjectOutputStream os =new ObjectOutputStream(socket.getOutputStream()); 
      os.writeObject(numberArray); 

      ObjectInputStream is = new ObjectInputStream(socket.getInputStream()); 
      int[] Arr = (int[])is.readObject(); 
      for (int e : Arr) { 
       System.out.println(e); 
      } 
     } catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      response = "UnknownHostException: " + e.toString(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      response = "IOException: " + e.toString(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } finally { 
      if (socket != null) { 
       try { 
        socket.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     textResponse.setText(response); 
     super.onPostExecute(result); 
    } 
} 
関連する問題