加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Java Socket通信中传递Object对象时注意的问题

(2012-03-13 09:44:15)
标签:

java

socket

object

it

分类: 技术文章
1:对象实现Serializable接口时,保证serialVersionUID一致:
private static final long serialVersionUID = -5240152692961888097L;
2:客户端和服务端传递的对象所在包的路径必须一致(这一点很容易出错)
代码如下:红色部分是注意的地方
Server:
package servertest;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import Student.Student;

public class Main {
    private static final int PORT = 7777;
    private Socket socket;
    private ServerSocket serverSocket;
    public Main() throws IOException {
        serverSocket = new ServerSocket(PORT);
        while (true) {
            socket = serverSocket.accept();
            new DoService(socket);
        }
    }
    class DoService extends Thread {
        private Socket socket;
        public DoService(Socket socket) {
            this.socket = socket;
            start();
        }
        public void run() {
            try {
                // 读取客户端发送来的student对象
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                Student student = (Student) ois.readObject();
                String vReceptMsg = "you send student - id: " + student.getId() + "  name: " + student.getName();
                System.out.println(vReceptMsg);
                // 向客户端发送新的对象
                int vNewId = student.getId() + 1;
                String vNewName = "李四" + vNewId;
                student.setId(vNewId);
                student.setName(vNewName);
                ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
                oos.writeObject(student);
                oos.flush();

            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        try {
            new Main();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Client:
package clienttest;
import Student.Student;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Main {
   private static final String IP = "127.0.0.1";
    private static final int PORT = 7777;
    public Main() throws UnknownHostException, IOException, ClassNotFoundException {
        Socket client = new Socket(IP, PORT);
        // 向服务器端发送学生对象
        ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
        Student student = new Student();
        student.setId(123);
        student.setName("tom");
        oos.writeObject(student);
        oos.flush();
        // 服务器端返回的新学生数据
        ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
        Student newStudent = (Student) ois.readObject();
        String vReceptMsg = "you get student - id: " + newStudent.getId() + "  name: " + newStudent.getName();
        System.out.println(vReceptMsg);
    }
    public static void main(String[] args) {
        try {
            new Main();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
Student类:
package Student;
import java.io.Serializable;
public class Student implements Serializable {
private static final long serialVersionUID = -5240152692961888097L;
    private int id;
    private String name;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有