2017-05-20 3 views
0

joinを使用して文字列配列を受け取る方法は?整数のためのString.join?

クライアントの整数配列を受け取るサーバーのTCPソケットを作成しようとしています。 "SER" クラスの

 int joined = Integer.valueOf(String.join(",", list)); 

:回線に問題を持つ

。私が書いたことは絶対にできないが、私がしたいことを説明するのに役立つかもしれないことは分かっている。

CLIENT:

import java.io.DataInputStream; 
import java.io.IOException; 
import java.io.ObjectOutputStream; 
import java.net.Socket; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class cli { 

    private static Socket socket; 
    private static final int PORT = 8000; 
    private static DataInputStream input; 
    private static ObjectOutputStream output; 

    public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 
     System.out.println("Enter number of the elements in array: "); 
     int broj = in.nextInt(); 
     List<Integer> listica = new ArrayList<>(); 

     System.out.println("Enter numbers for your array : "); 
     for (int i = 0; i < broj; i++) { 
      listica.add(in.nextInt()); 
     } 

     try { 
      socket = new Socket("localhost", PORT); 
      output = new ObjectOutputStream(socket.getOutputStream()); 
      input = new DataInputStream(socket.getInputStream()); 

      output.writeObject(listica); 
      String str = input.readUTF(); 
      System.out.println("New array of numbers is : "); 
      System.out.println(str); 

     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } finally { 
      in.close(); 
     } 
    } 
} 

サーバ

import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.ArrayList; 
import java.util.List; 



public class ser { 

    private static ServerSocket server; 
    private static Socket socket; 
    private static final int PORT = 8000; 
    private static ObjectInputStream input; 
    private static DataOutputStream output; 

    public static void main(String[] args) { 
     List<Integer> list = new ArrayList<>(); 

     try { 
      try { 
       server = new ServerSocket(PORT); 

       socket = server.accept(); 
       input = new ObjectInputStream(socket.getInputStream()); 
       Object ob = input.readObject(); 
       System.out.println("Data that is sent from client :"); 
       System.out.println(ob); 
       list = (List<Integer>) ob; 

       int joined = Integer.valueOf(String.join(",", list)); 

       output = new DataOutputStream(socket.getOutputStream()); 
       output.writeByte(joined); 

      } catch (ClassNotFoundException ex) { 
       ex.printStackTrace(); 
      } 

     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
+1

[Javaソケットの送信と受信バイト配列]の複製があります(http://stackoverflow.com/questions/1176135/java-socket-send-receive-byte-array) – james

答えて

0

私は、この目的のためのArrayListとにObjectOutputStreamを使ってお勧めしたいです。サーバーで

int arr = {1, 2, 3, 4}; 
ArrayList list = // copy the array 

ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); 
oos.writeObject(list); 

:クライアントで

ObjectInputStream ois = ObjectInputStream(socket.getInputStream()); 
ArrayList list = (ArrayList) ois.readObject(); 

リストが転送さ数字を含める必要があります。私は、プリミティブな整数に対してArrayListを使うことをお勧めします。一緒に作業する方が簡単です!

+0

java.io例外としてエラーが発生しました。 .StreamCorruptedException – Nanina

+0

通常、ソケットからのデータが正しく読み取られないと発生します。 –

関連する問題