0

您好我正在尝试将一个对象发送到服务器,然后在服务器收到它之后,从服务器获取相同的对象并将其作为字符串读取到客户端输出中。我最初发送的消息似乎有效,而之后的一切都没有,这是我的代码:

import java.io.*;
import java.net.*;


public class GUGLi {
    static Socket socket = null;
    static ObjectOutputStream out = null;
    static ObjectInputStream in = null;
    String host = "host";

       public static void main(String[] args) throws IOException {

    try {
        OpenPort();
        InfoSent();
        ReadInfo();



        String line;
        while ((line = in.toString()) != null) {
            System.out.println(line);
        }

    } catch (UnknownHostException e) {
        System.err.println("Don't know about host: " + "host");
        System.exit(1);
    } catch (IOException e) {
        System.err.println("Couldn't get I/O for "
                + "the connection to: " + "host");
        System.exit(1);
    in.close();
    socket.close();
    out.close();
     }
    }
public static void OpenPort() throws UnknownHostException, IOException{
        socket = new Socket ("host", 7879);
    }
public static void InfoSent()throws IOException {
            Student info = new Student (22, "Guglielmo", "Male",
                    "email", "#");
           out = new ObjectOutputStream(socket.getOutputStream());  
           out.writeObject(info);
           System.out.println("Sent: " + info);
           out.flush();
           }
 public static void ReadInfo()throws IOException {
         in = new ObjectInputStream(socket.getInputStream());


}
       }
4

2 回答 2

1

line = in.toString()不读行。它将 aInputStream转换为其字符串表示形式。您需要调用读取方法。如果您希望阅读您需要的行BufferedInputStream.readLine()。但是,如果您在同一个套接字上读取对象,则不能混合流/读取器类型,因此您应该在另一端读取readUTF()和写入。writeUTF()

于 2013-04-04T23:20:16.557 回答
0

您遇到的第一个问题是您没有像@EJP 所说的那样调用阅读方法,因此请参阅他的答案以了解更多详细信息。

编辑:我已删除有关无法在您的InputStream. 我认为您socket没有连接到另一个客户端是错误的,因为我认为它String host = "host"会连接到环回地址,并且我没有看到任何代码将数据发送回您的InputStream.

我建议你阅读一些教程来清除它。我建议您有关套接字的 Java 教程有一个强大的基础。它会解释你需要的一切。

于 2013-04-04T17:10:55.557 回答