【问题标题】:Sending objects to localhost server using java?使用java将对象发送到本地主机服务器?
【发布时间】:2013-03-13 13:15:33
【问题描述】:

如何在 localhost 服务器中创建 .ser 文件或将对象写入 .ser 文件?

以下代码可以读取.ser文件:

   public Object deserialize(InputStream is) {
    ObjectInputStream in;
    Object obj;
    try {
        in = new ObjectInputStream(is);
        obj = in.readObject();
        in.close();
        return obj;
    } catch (IOException ex) {
        ex.printStackTrace();
        throw new RuntimeException(ex);
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
        throw new RuntimeException(ex);
    }
    }


        URL url;
        URLConnection urlConn;
        DataInputStream dis;

        //url = new URL("http://localhost/Person.ser");

        urlConn = url.openConnection();
        urlConn.setDoInput(true);
        urlConn.setUseCaches(false);
        Person person = (person) deserialize(urlConn.getInputStream());

我需要任何服务器端程序来接收对象并存储在文件中吗?

【问题讨论】:

    标签: java file object serialization


    【解决方案1】:

    您可以使用以下方式写入 .ser 文件:

    try {
            FileOutputStream fos = new FileOutputStream("Filename.ser");
            ObjectOutputStream out = new ObjectOutputStream(fos);
            out.write(obj);
            fos.close();
            out.close();
    
        } catch (IOException ex) {}
    

    更新
    要在服务器端读取对象,您需要创建ObjectInputStream wrappint 与客户端交互的套接字的 inputStream。可以这样做:

    try
          {
            Socket s = serverSocket.accept();
            ObjectInputStream oin = new ObjectInputStream(s.getInputStream());
            Object obj = oin.readObject();
            oin.close();
          }catch(Exception ex){}
    

    好的,这里是我向服务器发送 ArrayList 的完整示例。
    Client.java

    import java.net.*;
    import java.io.*;
    import java.util.*;
    
    public class Client 
    {
        public static void main(String[] args) 
        {
            Socket s = null;
            ObjectOutputStream out = null;  
            System.out.println("Connecting to Server ...");
            try 
            {
                s = new Socket("localhost", 1401);
                out = new ObjectOutputStream (s.getOutputStream());
                ArrayList<String> list = ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < 10 ; i++)
        {
            list.add("String"+i);
        }
                out.writeObject(list);out.flush();
            System.out.println("ArrayList sent to Server");
            } catch ( Exception e) 
            {
                e.printStackTrace();
            }
            finally
            {
                if (out!= null)
                {
                    try
                    {
                        out.close();
                    }
                    catch (Exception ex){}
                }
                if (s != null)
                {
                    try
                    {
                        s.close();
                    }
                    catch (Exception ex){}
                }
            }
        }
    }
    

    Server.java

    import java.net.*;
    import java.io.*;
    import java.util.*;
    
    public class Server 
    {
        public static void main(String[] args) 
        {
            ObjectInputStream oin = null;
            ServerSocket server;
            Socket socket = null;
            try
            {
                server = new ServerSocket(1401);
                socket = server.accept();
                System.out.println("Client Connected..Sending ArrayList to Client");
                oin = new ObjectInputStream(socket.getInputStream());
                ArrayList<String> list = (ArrayList<String>)oin.readObject();
            System.out.println("Recieved ArrayList from client "+list);
                //Writing to file now 
                FileOutputStream fos = new FileOutputStream("Filename.ser");
                ObjectOutputStream out = new ObjectOutputStream(fos);
                out.write(obj);
                fos.close();
                out.close();
                System.out.println("Written to file");
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            finally
            {
                if (oin != null)
                {
                    try
                    {
                        oin.close();
                    }
                    catch (Exception ex){}
                }
                if (socket != null)
                {
                    try
                    {
                        socket.close();
                    }
                    catch (Exception ex){}
                }
            }
        }
    }
    

    【讨论】:

    • 不,我想写入远程服务器中的文件,而不是我的计算机上。
    • @AntonioKumar 然后首先你必须通过套接字将该对象发送到删除服务器,然后使用上面给出的代码将其写入那里。
    • 我还是不明白。我如何发送它?你能给我一些例子或参考吗?
    • 谢谢我知道了。但是假设现在我想使用 ftp 或 sftp 将其写入远程服务器,而不是本地主机。所以在 server.java 中 new ServerSocket(1401) 不起作用。我需要做出什么改变。
    • 我想也是在客户端,我需要添加用户名和密码。
    猜你喜欢
    • 2017-02-14
    • 2013-01-20
    • 1970-01-01
    • 2011-06-26
    • 2017-01-09
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多