Всем доброго времени суток! Практикую передачу данных по сокетам от клиента к серверу и наоборот, в случае передачи текста через PrintWriter все работает хорошо, но как только пытаюсь передавать объекты через ObjectOutputStream, сервер выбрасывает исключение SocketException: connection reset.
Суть: клиент подсоединяется к серверу и отправляет ему сообщение - объект, содержащий в себе имя отправителя и его ID. Сервер этот объект принимает и выводит в консоль имя и ID отправителя.
Серверpackage objectschange;
import java.io.*;
import java.net.*;
public class ServerSide {
protected ObjectInputStream serverOIS;
public static void main(String[] args) {
ServerSide server = new ServerSide();
server.launchServer();
}
private void launchServer() {
try {
ServerSocket srvSocket = new ServerSocket(3200);
while (true) {
Socket serverClientSocket = srvSocket.accept();
serverOIS = new ObjectInputStream(serverClientSocket.getInputStream());
handleObject(serverOIS);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void handleObject(ObjectInputStream serverOIStream) {
ClientMessagePackage messagePackage;
try {
while ((messagePackage = (ClientMessagePackage) serverOIStream.readObject()) != null) {
System.out.println(messagePackage.packageSender + " " + messagePackage.packageSenderID);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Клиент
package objectschange;
import java.io.*;
import java.net.*;
public class ClientSide {
protected ObjectOutputStream clientOOS;
public static void main(String[] args) {
ClientSide client = new ClientSide();
client.establishConnection();
}
private void establishConnection() {
try {
Socket clientSocket = new Socket("127.0.0.1", 3200);
Thread.sleep(3000);
clientOOS = new ObjectOutputStream(clientSocket.getOutputStream());
sendPackage(clientOOS, new ClientMessagePackage("Name", 1));
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void sendPackage(ObjectOutputStream clientOOStream, ClientMessagePackage clientMPackage) {
try {
clientOOStream.writeObject(clientMPackage);
clientOOStream.flush();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
class ClientMessagePackage implements Serializable {
protected String packageSender;
protected int packageSenderID;
protected ClientMessagePackage(String name, int id) {
packageSender = name;
packageSenderID = id;
}
}
Запускаю вначале сервер, ожидающий запроса, затем клиента, к нему подключающегося. Консоль:
При этом если после первого клиента подключить еще одного, то в итоге объект с сообщением до сервера доходит, он его печатает в консоль, но затем снова выбрасывается исключение:
Если я правильно понимаю, клиент самостоятельно отключается от сервера(?), почему это происходит?
Не могу понять, в чем проблема, прошу вашего совета.
Заранее благодарю за ответы!