2013-04-27 1 views
0

Я в основном хочу отправить arraylist от сервера к моему клиенту, и он должен быть сериализован, поэтому я использую ObjectI/OStream. Но это при первом создании программы клиент/сервер, поэтому я действительно не знаю, как это сделать. Я даже не могу построить конструктор ObjectInputStream в клиентской программе. Я получаю сообщение об ошибке:Попробуйте получить ObjectInputStream с сервера (TCP) для десериализации объектов

Exception in thread "main" java.net.SocketException: Connection reset by peer: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(Unknown Source) at java.net.SocketOutputStream.write(Unknown Source) at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source) at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source) at java.io.ObjectOutputStream.(Unknown Source) at SalesServer.main(SalesServer.java:35)

Код: Код

import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.ObjectInputStream; 
    import java.io.ObjectOutputStream; 
    import java.net.Socket; 
    import java.net.UnknownHostException; 
    import java.util.Scanner; 


    public class SalesClient { 
     public static void main(String[] args) throws IOException{ 

    Socket ssocket = null; 
    ObjectOutputStream out = null; 
    ObjectInputStream inp = null; 
    Scanner in = null; 

    try { 
     ssocket = new Socket("FahadAhmed-PC", 6667); 
     in = new Scanner(System.in); 
     inp = new ObjectInputStream(); 

    }catch(UnknownHostException e) { 
     System.err.println("Don't know about host: FahadAhmed-PC"); 
     System.exit(1); 
    }catch(IOException e){ 
     System.err.println(e); 
     System.exit(1); 
    } 
} 

} 

Server. Сначала она сканирует текстовый файл, а затем добавляет продажи объекта ArrayList:

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.ObjectOutputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.ArrayList; 
import java.util.Scanner; 


public class SalesServer { 

    public static void main(String[] args) throws IOException{ 

     ServerSocket serverSocket = null; 

     try { 
     serverSocket = new ServerSocket(6667); 
    } catch (IOException e){ 
     System.out.println("Could not listen on port: 5555."); 
     System.exit(1); 
    } 

    Socket clientSocket = null; 
    try{ 
     clientSocket = serverSocket.accept(); 
    }catch (IOException e){ 
     System.out.println("Accept failed."); 
     System.exit(1); 
    } 

    ArrayList<Sales> salesList = getSalesList(); 

    ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream()); 

} 

private static ArrayList<Sales> getSalesList() throws FileNotFoundException { 
    ArrayList<Sales> list = new ArrayList<Sales>(10); 
    Scanner in = new Scanner(new BufferedReader(new FileReader("sales.txt"))); 
    while(in.hasNext()){ 
     String state; 
     int q1, q2, q3, q4; 
     state = in.nextLine(); 
     q1 = in.nextInt(); 
     q2 = in.nextInt(); 
     q3 = in.nextInt(); 
     q4 = in.nextInt(); 
     in.nextLine(); 
     Sales sale = new Sales(state, q1, q2, q3, q4); 
     System.out.println(sale.toString()); 
     list.add(sale); 
    } 
    return null; 
} 

} 
+0

Какую версию JDK вы используете? Если вы используете JDK7, то я могу дать вам образец с использованием NIO2, который работает лучше, чем блокирование. –

ответ

0

Вот очень хороший пример про сокеты программирования http://www.tutorialspoint.com/java/java_networking.htm.

+0

Без объекта ObjectOutputStream. Не ответ. – EJP

+0

Вам нужно только изменить 'DataOutputStream out = new DataOutputStream (server.getOutputStream());' on' ObjectOutputStream out = new ObjectOutputStream (server.getOutputStream()); ' –

+0

Так включите это в свой ответ, но ничто из этого не будет выполнить запись объектов, что является темой этого вопроса. – EJP

0
  1. Код клиента не компилируется.

  2. Он выходит, прежде чем делать какие-либо ввод-вывод, который закрывает сокет, что вызывает исключение на другом конце.

+0

Я получаю это, но как мне заставить потоки работать? –

+0

Err, * read * от них? В противном случае, в чем смысл? – EJP

Смежные вопросы