加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何使用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中描述的有关对象流标头的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读