Я установил соединение через сокеты между двумя компьютерами.Я создал собственный объект с именем «Результат» и могу успешно перенести его на компьютер-сервер с клиентского компьютера.
Если я выполняю подключение через сокет только на своем компьютере, я могу также получить объект с серверного компьютера.
Проблема заключается в том, что я пытаюсь получить объект с серверного компьютера.Я получаю сообщения об ошибках, и у меня возникает ощущение, что с отправляемым объектом что-то происходит.Если я открываю сохраненный (сериализуемый) объект Result на своем компьютере в блокноте, я получаю много случайных символов, но когда я делаю то же самое на сервере, то это всего два символа.
Вот мойкод, я использую JFileChooser, так что я могу легко получить доступ к объекту, который я хочу отправить с сервера, понятно, что у меня есть доступ к обоим компьютерам.
Код для отправляющего сервера
public static void serverSendObject() throws IOException, ClassNotFoundException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(2001,10);
}
catch (IOException ex) {
System.out.println("Can't setup server on this port
number. ");
}
Socket socket = null;
OutputStream out = null;
ObjectOutputStream objOut = null;
try {
socket = serverSocket.accept();
}
catch (IOException ex) {
System.out.println("Can't accept client connection. ");
}
try {
out = socket.getOutputStream();
}
catch (IOException ex) {
System.out.println("Can't get socket input stream. ");
}
try {
objOut = new ObjectOutputStream(out);
}
catch (FileNotFoundException ex) {
System.out.println("File not found. ");
}
JFileChooser fc = new JFileChooser();
int reValue=fc.showOpenDialog(null);
if(reValue == JFileChooser.APPROVE_OPTION) {
try(ObjectInputStream objInput = new ObjectInputStream(new FileInputStream(fc.getSelectedFile()))) {
objOut.writeObject(objInput.readObject());
}
catch(IOException e) {
}
catch(ClassNotFoundException e) {
}
}
serverSocket.close();
socket.close();
}
Код для принимающего клиента
public void loadExternal() throws IOException, ClassNotFoundException {
Visualizer vis = new Visualizer();
currentVis=vis;
Socket socket = null;
String host= *insert IP address*
socket= new Socket(host, 2001);
InputStream in = socket.getInputStream();
ObjectInputStream objIn = new ObjectInputStream (in);
currentRes = (Result) objIn.readObject();
objIn.close();
socket.close();
}
Я продолжаю получать
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
как ошибку.Я пытался поймать это, но это не помогает.Я пробовал несколько разных методов, но ничего не работает.
Просто хочу указать, что точно такой же код работает, когда я подключаю сокеты на своем СОБСТВЕННОМ компьютере, и что эта проблема возникает, когда я соединяю два разных компьютера И что я могу отправить объект насерверный компьютер.
РЕДАКТИРОВАТЬ: Я думаю, что я могу подтвердить, что что-то произошло с объектом, который я послал.Локально (через сокеты) сохраненный объект имеет размер 1131 байт, а объект, который я отправил на сервер, составляет всего 4 байта.
Я использую ту же технику при отправке объектов, с ObjectOutputStream на клиенте и ObjectInputStream на сервере.