Witam forumowiczów, mam problem z aplikacją klient - serwer.
Odpalam serwer, następnie odpalam clienta, łączę się poprawnie z serwerem i wysyła się obiekt funkcją writeObject(), serwer otrzymuje obiekt i jest wszystko ok. W przypadku kiedy uruchamiam kolejnego klienta i próbuję połączyć się z serwerem, połączenie zostaje nawiązane ale obiekt nie chce się wysłać i wyskakuję błąd: java.net.SocketException: Software caused connection abort: socket write error.
wysyłanie w tym miejscu:
ous.writeObject(new wyslij("obiekt1"));
serwer:
package wordprojekt.server; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class ServerWord { public static void main(String[] args) { try { int i = 1; ServerSocket s = new ServerSocket(8185); while (true) { Socket incoming = s.accept(); System.out.println("Spawing " + i); Runnable r = new ThreadedEchoHandler(incoming); Thread t = new Thread(r); t.start(); i++; } } catch (IOException e) { e.printStackTrace(); } } } class ThreadedEchoHandler implements Runnable { private Socket incoming; public ThreadedEchoHandler(Socket i) { incoming = i; } @Override public void run() { try { try { InputStream inStream = incoming.getInputStream(); OutputStream outStream = incoming.getOutputStream(); //Scanner in = new Scanner(inStream); //PrintWriter out = new PrintWriter(outStream, true); wyslij noweA = null; ObjectInputStream ois = new ObjectInputStream(incoming.getInputStream()); System.out.println(inStream.available()); while (inStream.available() != 0) { noweA = (wyslij) ois.readObject(); System.out.println(noweA); } System.out.println(inStream.available()); inStream.close(); ois.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { incoming.close(); } } catch (IOException e) { e.printStackTrace(); } } }
Client:
package wordprojekt.server; import java.io.InputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Serializable; import java.net.*; import java.util.Scanner; public class ClientTest { public static void main(String args[]) { try { Socket socket = new Socket("localhost", 8185); InputStream inStream = socket.getInputStream(); OutputStream outStream = socket.getOutputStream(); Scanner in = new Scanner(inStream); PrintWriter outt = new PrintWriter(outStream, true); /* for(int i = 0; i < 10; i++){ outt.println("wyslany" + i); System.out.println(in.nextLine()); } */ ObjectOutputStream ous = new ObjectOutputStream(socket.getOutputStream()); System.out.println("Client uruchomiony: "); ous.writeObject(new wyslij("obiekt1")); ous.writeObject(new wyslij("obiekt2")); ous.close(); socket.close(); System.out.println("Client zamkniety: "); } catch (Exception e) { System.err.println(e); } } } class wyslij implements Serializable{ /** * */ private static final long serialVersionUID = -1590808355799495667L; String name; public wyslij(String name) { super(); this.name = name; } @Override public String toString() { return "A [" + name + "]"; } }