如何使用java中的套接字发送/接收对象[复制]
发布时间:2020-12-15 04:24:35 所属栏目:Java 来源:网络整理
导读:参见英文答案 Socket program to send and receive user defined objects not working????????????????????????????????????1个 当我在CMD窗口中执行我的代码时,它在客户端模式下不起作用,完全在以下行: ObjectInputStream ois = new ObjectInputStream(soc
参见英文答案 >
Socket program to send and receive user defined objects not working????????????????????????????????????1个
当我在CMD窗口中执行我的代码时,它在客户端模式下不起作用,完全在以下行: ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); 此行上的程序块但不停止或发出错误信号: 我有3个类:客户端,服务器,消息 ClientClass: package client; // Organize imports public class Client { public static void main(String[] args) throws UnknownHostException,IOException,ClassNotFoundException { System.out.println("welcome client"); Socket socket = new Socket("localhost",4444); System.out.println("Client connected"); ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream()); System.out.println("Ok"); Message message = new Message(new Integer(15),new Integer(32)); os.writeObject(message); System.out.println("Envoi des informations au serveur ..."); ObjectInputStream is = new ObjectInputStream(socket.getInputStream()); Message returnMessage = (Message) is.readObject(); System.out.println("return Message is=" + returnMessage); socket.close(); } } 服务器 这是Server类的代码 package Sockets; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static final int port = 4444; private ServerSocket ss = null; public void runServer() throws IOException,ClassNotFoundException{ ss = new ServerSocket(port); System.out.println("le systeme est pret pour accepter les connexions"); Socket socket = ss.accept(); ObjectInputStream is = new ObjectInputStream(socket.getInputStream()); ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream()); Message m = (Message) is.readObject(); doSomething(m); os.writeObject(m); socket.close(); } private void doSomething(Message m) { m.setResult(new Integer(m.getA().intValue()*m.getB().intValue())); } public static void main(String[] args) throws ClassNotFoundException,IOException { new Server().runServer(); } } 信息 这是我的对象,我通过实现Serializable接口使它成为Serializable import java.io.Serializable; public class Message implements Serializable { private static final long serialVersionUID = -5399605122490343339L; private Integer A; private Integer B; private Integer Result; public Message(Integer firstNumber,Integer secondNumber ){ this.A = firstNumber; this.B = secondNumber; } public Integer getA() { return A; } public Integer getB() { return B; } public void setResult(Integer X) { Result = X; } } 解决方法
您需要在两端的ObjectInputStream之前创建ObjectOutputStream,原因是Javadoc中描述的有关对象流标头的原因.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |