2017-05-20 8 views
0

Wie erhalten String Array mit Join?String.join für ganze Zahlen?

Ich versuche Server-TCP-Socket zu erstellen, die von Client-Array von Ganzzahlen empfängt.

ein Problem mit Leitung:

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

in "ser" -Klasse. Ich weiß, was ich geschrieben habe, ist absolut nicht möglich, könnte aber helfen zu beschreiben, was ich machen möchte.

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

SERVER

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

Mögliche Duplikate von [Java-Socket senden und empfangen Byte-Array] (http://StackOverflow.com/Questions/1176135/Java-Socket-Send-Receive-Byte-Array) – james

Antwort

0

Ich würde vorschlagen, eine Arraylist und Object für diesen Zweck verwendet wird.

Im Client:

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

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

Im Server:

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

Die Liste der übergebenen Zahlen enthalten soll. Ich würde vorschlagen, ArrayLists über primitive Ganzzahlen zu verwenden. Es ist einfacher zu arbeiten!

+0

Ich bekomme Fehler als Ausnahme java.io .StreamCorruptedException – Nanina

+0

Es passiert normalerweise, wenn Daten vom Socket nicht richtig gelesen werden. –