Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2011, 14:23   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию Передача объекта

Правильно ли я сделал, если хотел получить как результат передачу объекта от клиента - серверу. И, как я понял,и на сервере, и на клиенте должен быть реализован класс, объект которого я передаю ?

клиент:

Код:
class A implements Serializable{
    public byte value = 100;
}
public class Client {
    public static void main(String[] args){
        
        try{
             Socket fromserver = new Socket("localhost", 3128);
         BufferedOutputStream bos = new BufferedOutputStream(fromserver.getOutputStream());
         ObjectOutputStream oos = new ObjectOutputStream(bos);
         A obj = new A();
         oos.writeObject(obj);
         oos.flush();
         oos.close(); 
         fromserver.close();
 
        }catch(Exception e){}
    }
}
сервер

Код:
class A implements Serializable{
    public byte value = 0;
}
 
public class Server{
    public static void main(String[] args)throws IOException {
        System.out.println("Welcome to Server side");
    
ServerSocket servers = null;
Socket       fromclient = null;
 
    servers = new ServerSocket(3128);
 
System.out.print("Waiting for a client...");
fromclient= servers.accept();
System.out.println("\nClient connected!");
 
BufferedInputStream bis = new BufferedInputStream(fromclient.getInputStream());
ObjectInputStream ois = new ObjectInputStream(bis);
try{
    
A obj2 = (A) ois.readObject();
System.out.println("value: "+obj2.value);
}catch(Exception e){}
 
bis.close();
ois.close();
  servers.close();
  fromclient.close();
 
    }
}
zhenya.ya вне форума Ответить с цитированием
Старый 22.10.2011, 19:42   #2
dox07
Пользователь
 
Регистрация: 16.02.2010
Сообщений: 26
По умолчанию

да, ты правильно понимаешь обычно общие классы классы, кот. используются на сервере и клиенте выносят в общую библиотеку (jar файл).
dox07 вне форума Ответить с цитированием
Старый 19.06.2012, 21:20   #3
gochualex
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 1
По умолчанию

Есть проблема.
По месному примеру написал код
Клиент
package mycliente;

import java.net.*;
import java.io.*;
public class MyCliente {
public static Object toObject(byte[] bytes) {
Object obj = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();
} catch (IOException ex) {
//TODO: Handle the exception
} catch (ClassNotFoundException ex) {
//TODO: Handle the exception
}
return obj;
}
public static void main(String[] args) {
String serverIP = "192.168.3.100";
int port = 3001;
Socket fromserver = null;
try {
fromserver = new Socket(serverIP, port);
BufferedInputStream bis = new BufferedInputStream(fromserver.getI nputStream());
ObjectInputStream ois = new ObjectInputStream(bis);
System.out.println("Client in connect");

MyObject myo = (MyObject) ois.readObject();
System.out.println(myo.getFileName( ));

} catch (Exception e) {
e.printStackTrace();
}

}
}
Сервер
package myserver;

import java.net.*;
import java.io.*;


public class MyServer {
public static byte[] toByteArray (Object obj) {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
bytes = bos.toByteArray ();
}
catch (IOException ex) {
//TODO: Handle the exception
}
return bytes;
}
public static void main(String[] args) throws IOException {
int PORT = 3001;

MyObject mo = null;

String fName = "1.txt";
File f = new File(fName);

byte [] fileToByteArr = null;

if(f.exists()&&f.isFile())
fileToByteArr = toByteArray(f);

mo = new MyObject (fName,fileToByteArr);

Socket fromclient = null;

try {
ServerSocket serverSocket = new ServerSocket(PORT);
fromclient = serverSocket.accept();

System.out.println("Client accessed");
BufferedOutputStream bos = new BufferedOutputStream (fromclient.getOutputStream());
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(mo);
oos.flush();
oos.close();
fromclient.close();

} catch (Exception e) {
System.out.println("Error: \n");
} finally {
if (fromclient != null) {
fromclient.close();
}
}
}
}

Объект
import java.io.Serializable;

public class MyObject implements Serializable {
private String myFileName;
private int myFileSize;
private byte[] myFileContent = null;

public MyObject(String fileName, byte[] content) {
this.myFileName = fileName;
this.myFileContent = content;
this.myFileSize = content.length;
}
public String getFileName(){
return myFileName;
}
public int getFileSize(){
return myFileSize;
}
}
Логика такова.. передать файл, преврашенный в байт массив, обернутый обернутый в объект от сервера - клиенту. Запуск сервера проходит нормально, запуск клинта выкидывает стект ошибок
Client in connect
java.lang.ClassNotFoundException: myserver.MyObject
(сокращу до минимума)
at java.io.ObjectInputStream.resolveCl ass(ObjectInputStream.java:622)
at java.io.ObjectInputStream.readNonPr oxyDesc(ObjectInputStream.java:1593 )
at java.io.ObjectInputStream.readClass Desc(ObjectInputStream.java:1514)
at java.io.ObjectInputStream.readOrdin aryObject(ObjectInputStream.java:17 50)
at java.io.ObjectInputStream.readObjec t0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObjec t(ObjectInputStream.java:369)
at mycliente.MyCliente.main(MyCliente. java:46)
(46 строка в ктиента)
MyObject myo = (MyObject) ois.readObject();
Буду рад обым подсказкам и помощи.
gochualex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача объекта в функцию, и его деструкторы Janym Общие вопросы C/C++ 53 28.02.2011 20:47
Передача метода объекта. the_deer_one Общие вопросы C/C++ 8 09.09.2010 15:07
Передача имени объекта в процедуру (Потоки) Delphi edmynt Помощь студентам 3 03.02.2010 20:58
Передача объекта в функцию Юра_YUYU Общие вопросы C/C++ 14 18.01.2010 16:00
Передача поля объекта в процедуру в качестве параметра Голованов Д. Microsoft Office Excel 10 02.11.2009 16:22