读取我从Server Java发送的对象

时间:2013-04-04 16:39:41

标签: java sockets

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

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());


}
       }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

你遇到的第一个问题是@EJP并没有将阅读方法称为sais,所以请看他的答案以获得更多细节。

编辑:我删除了有关无法在InputStream中接收数据的信息。我认为你的socket没有连接到另一个客户端是错误的,因为我认为String host = "host"会连接到环回地址,而我没有看到任何代码将数据发送回你的{ {1}}。

我建议您阅读一些教程以清除它。我建议你Java tutorial about socket要有一个强大的基础。它将解释您需要的一切。