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 + "]";
}
}