想试验下JAVA 套接字编程.两台机器(局域网内)一台客户一台服务器,请问如何使客户端序列华后的对象通过流传给服务器!!!!!!

解决方案 »

  1.   

    比如客户端机器:
    import java.io.*;
    import java.util.Date;public class SaveDate {public static void main(String argv[]) throws Exception {
    FileOutputStream fos = new FileOutputStream("date.out");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    Date date = new Date();
    oos.writeObject(date);
    oos.flush();
    oos.close();
    fos.close();
    }
    }
     
    服务器:
    import java.io.*;
    import java.util.Date;public class ReadDate {public static void main(String argv[]) throws Exception {
    FileInputStream fis = new FileInputStream("D:\\date.out");
    ObjectInputStream ois = new ObjectInputStream(fis);
    Date date = (Date) ois.readObject();
    System.out.println("The date is: "+date);
    ois.close();
    fis.close();
    }
    }序列化后的对象写入客户端机器的D:\\date.out文件内,服务器端机器如何取得此文件从而反序列化???????????
      

  2.   

    如果你用TCP呢就用这两个累  
    ServerSocket 
    Socket 如果是UDP呢 就用这个
    DatagramSocket 
      

  3.   

    以TCP/IP连接为例
    服务器端先建立socketpackage test;import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;public class Server {
    public static void main(String[] args) {
    System.out.println("server start...");
    try {
    ServerSocket ss=new ServerSocket(8888);
    while(true){
    Socket s=ss.accept();
    new ServerThread(s).start();
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }建立处理程序package test;import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.Socket;public class ServerThread extends Thread {
    private Socket s;
    private ObjectInputStream ois;
    private ObjectOutputStream oos; public ServerThread(Socket s) {
    this.s = s;
    try {
    ois = new ObjectInputStream(s.getInputStream());
    oos = new ObjectOutputStream(s.getOutputStream());
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } public void run() {
    try {
    control();
    s.close();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } } public void control() throws Exception {

    Request req = (Request) ois.readObject();
    String cmdType = req.getCmdType();
    if (cmdType.equals("login")) {
    loginHandle(req);
    }
    if (cmdType.equals("otherCmd")) {
    otherCmdHandle(req);
    }
    } public void loginHandle(Request req) throws Exception{
    String userName = req.getParameter("userName");
    String userPassword = req.getParameter("userPassword");
    Response res = new Response("login");
    if (userName.equals("zjz444") && userPassword.equals("8888")) {

    res.setDate("zjz444 welcome!");
    } else {
    res.setDate("no such user!");
    }
    oos.writeObject(res);
    } public void otherCmdHandle(Request req) {
    // 写入你自已对其它命令的处理方法
    }}
      

  4.   

    将要求和返回值封装以便于流传输package test;import java.io.Serializable;
    import java.util.Properties;public class Request implements Serializable{ private String cmdType;
    private Properties parameters;

    public Request(String type){
    parameters=new Properties();
    cmdType=type;
    }
    public void setParameters(String key,String value){
    parameters.setProperty(key, value);
    }
    public String getParameter(String key){
    return parameters.getProperty(key);
    }
    public Properties getAllParameters(){
    return parameters;
    }
    public String getCmdType(){
    return cmdType;
    }
    }
    package test;import java.io.Serializable;import sun.print.resources.serviceui;public class Response implements Serializable{
    private String response;
    private Serializable date;
    public Response(String response){
    this.response=response;
    }
    public void setDate(Serializable date){
    this.date=date;
    }
    public Serializable getDate(){
    return date;
    }
    public String getRes(){
    return response;
    }
    }建立客户端package test;import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.Socket;public class Client { public static void main(String[] args) throws Exception{
    System.out.println("client start...");
    Socket s=new Socket("127.0.0.1",8888);
    ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
    Request req=new Request("login");
    req.setParameters("userName", "zjz444");
    req.setParameters("userPassword", "8888");
    oos.writeObject(req);
    oos.flush();

    ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
    Response res=(Response)ois.readObject();
    if(res.getRes().equals("login")){
    System.out.println((String)res.getDate());
    }
    }
    }服务器上放Server & ServerThread & Request & Response四个类 
    客户端上放Client & Request & Response 三个类本来想做一个多线程的,调试时遇到点问题就变成这个样了,你自已改一下.
      

  5.   

    ObjectInputStream
    ObjectOutputStream前提,对方要有这个类,否则你只能反射调用类的方法和属性了。