2017-05-20 13 views
0

如何讓接收字符串數組使用連接?整數的String.join?

我正在嘗試創建服務器TCP套接字從客戶端的整數數組接收。

經與行的問題:在 「SER」 類

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

。我知道我寫的是絕對不可能的,但可能有助於描述我想要做什麼。

客戶:

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(); 

列表應包含所傳遞的數字。我建議使用基本整數的ArrayLists。與它合作更容易!

+0

我得到錯誤作爲一個異常java.io .StreamCorruptedException – Nanina

+0

它通常發生在來自套接字的數據未正確讀取時。 –