2017-05-20 14 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

它通常发生在来自套接字的数据未正确读取时。 –