Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取我从Java服务器发送的对象_Java_Sockets - Fatal编程技术网

读取我从Java服务器发送的对象

读取我从Java服务器发送的对象,java,sockets,Java,Sockets,您好,我正在尝试向服务器发送一个对象,然后在服务器接收到它之后,从服务器获取同一个对象,并在客户端输出中将其作为字符串读取。我最初发送的消息似乎正常,但之后的一切都不正常,以下是我的代码: import java.io.*; import java.net.*; public class GUGLi { static Socket socket = null; static ObjectOutputStream out = null; static ObjectInp

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

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


}
       }

您遇到的第一个问题是您没有调用@EJP的sais读取方法,因此请查看他的答案以了解更多详细信息

编辑:我已删除了有关无法在
InputStream
中接收数据的信息。我错误地认为您的
套接字
未连接到另一个客户端,因为我认为
String host=“host”
将连接到环回地址,并且我没有看到任何代码将数据发送回您的
输入流


我建议你读一些教程来澄清这一点。我建议你有一个坚实的基础。它将解释您需要的所有内容。

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

工作和不工作是什么意思?你能说得更清楚吗?是的,很抱歉,在我第一次打印发送后:我似乎没有收到服务器的任何响应或任何错误消息,说明它无法连接。没问题,如果你发现这个awnser有用,你可以升级它,如果是这样的话,可以标记为awnser。但是我很高兴我能帮助你。这个答案完全不正确。他可以使用同一个插座进行发送和接收。其他人都知道。@EJP我可能不了解他的情况,但如果我没有弄错的话,将输出写入并接收到同一个套接字是不符合逻辑的。你为什么要做这样的事。也许是我的解释不够清晰,但我不明白我做了什么wrong@Marc-安德烈,你错了。每个人都通过同一个套接字读写。它们是全双工信道。它使用了两种资源,其中一种在这里不符合逻辑。@EJP我知道您可以在同一个套接字上读写。但是您读取的内容必须来自另一个客户机或另一个源,而不是同一个套接字,即刚刚写入的同一个主机。我在想,当他在=newObjectInputStream(socket.getInputStream())中执行
他正在等待输入,对吗?但是他通过
out=newObjectOutputStream(socket.getOutputStream())发送他的日期在代码中没有任何地方我看到另一个可以发送数据的客户端。所以我认为通过套接字发送并期望它在同一套接字的InputStream中写入不是逻辑