首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器仅读取从客户端发送的第一个对象

服务器仅读取从客户端发送的第一个对象
EN

Stack Overflow用户
提问于 2013-01-15 23:45:16
回答 1查看 210关注 0票数 0

我在向服务器发送对象时遇到问题。现在,我已经设置了服务器并侦听客户端。客户端连接、发送测试对象(只是一个字符串)并将其输出到命令行。它适用于发送的第一个字符串,但之后不起作用。

服务器(Hivemind.java):

代码语言:javascript
复制
    // Open server socket for listening
    ServerSocket ss = null;
    boolean listening = true;
    try {
        ss = new ServerSocket(PORT_NUMBER);
    } catch (IOException e) {
        System.err.println("Cannot start listening on port " + PORT_NUMBER);
        e.printStackTrace();
    }

    // While listening is true, listen for new clients
    while (listening) {
        Socket socket = ss.accept();
        ServerDispatcher dispatcher = new ServerDispatcher(socket);
        dispatcher.start();
    }

    // Close the socket after we are done listening
    ss.close();

服务器线程(ServerDispatcher):

代码语言:javascript
复制
public ServerDispatcher(Socket socket) {
    super("ServerDispatcher");
    this.socket = socket;
}

public void run() {
    System.out.println("Client connected");
    try {
        input = socket.getInputStream();
        objInput = new ObjectInputStream(input);
        Object obj = null;

        try {
            obj = (String)objInput.readObject();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(ServerDispatcher.class.getName()).log(Level.SEVERE, null, ex);
        }

        System.out.println(obj);
    } catch (IOException ex) {
        Logger.getLogger(ServerDispatcher.class.getName()).log(Level.SEVERE, null, ex);
    }

连接类(HivemindConnect.java):

代码语言:javascript
复制
public HivemindConnect(int port) {
    this.port = port;
    url = "localhost";
}

public HivemindConnect(int port, String url) {
    this.port = port;
    this.url = url;
}

public void connect() {
    try {
        socket = new Socket(url, port);
        output = socket.getOutputStream();
        objOutput = new ObjectOutputStream(output);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void close() {
    try {
        objOutput.close();
        output.close();
        socket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void send(Object obj) {
    try {
        objOutput.writeObject(obj);
        objOutput.flush();
    } catch (IOException ex) {
        Logger.getLogger(HivemindConnect.class.getName()).log(Level.SEVERE, null, ex);
    }
}

CustomerTopComponent:

代码语言:javascript
复制
// When the TC is opened connect to the server
@Override
public void componentOpened() {
    hivemind = new HivemindConnect(9001);
    hivemind.connect();
}

private void btnSendActionPerformed(java.awt.event.ActionEvent evt) {
    hivemind.send(txtText.getText());
}

// When the TC is closed close the connection to the server
@Override
public void componentClosed() {
    hivemind.close();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-15 23:59:07

你需要一个这样的循环:

代码语言:javascript
复制
  while(objInput.available()>0){
    Object obj = null;
    obj = (String)objInput.readObject();
    System.out.println(obj);}

或者类似的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14341350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档