Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 out.write()方法中的问题;_Java_Sockets_Io - Fatal编程技术网

Java out.write()方法中的问题;

Java out.write()方法中的问题;,java,sockets,io,Java,Sockets,Io,我想从服务器向客户端发送消息,发现了几个问题: 如果由发送,则刷新();方法,则客户端可以读取它,但是 当我使用方法out.write()时然后客户端接收状态为-1(未接收数据) 我应该添加什么,以便客户端可以使用nmbr 2中的方法接收消息。以下是我在客户端从服务器接收消息时使用的方法: int totalBytesRcvd = 0; // Total bytes received int bytesRcvd; // Bytes received in last read

我想从服务器向客户端发送消息,发现了几个问题:

  • 如果由
    发送,则刷新
    ();方法,则客户端可以读取它,但是
  • 当我使用方法
    out.write()时
    然后客户端接收状态为
    -1
    (未接收数据)
我应该添加什么,以便客户端可以使用nmbr 2中的方法接收消息。以下是我在客户端从服务器接收消息时使用的方法:

    int totalBytesRcvd = 0; // Total bytes received
    int bytesRcvd; // Bytes received in last read
    byte[] byteBufferreceive = new byte[256];
    while (totalBytesRcvd < byteBufferreceive.length) {
        if ((bytesRcvd = in.read(byteBufferreceive, totalBytesRcvd, 
    byteBufferreceive.length - totalBytesRcvd)) == -1)
        {
        Toast.makeText(this, "byte lenght: "+bytesRcvd, Toast.LENGTH_SHORT).show();
        Toast.makeText(this, "communication error", Toast.LENGTH_LONG).show();
        }
        totalBytesRcvd += bytesRcvd;            
    }
    System.out.println("The length of the received data "+totalBytesRcvd);
    String receive;
    receive = new String(byteBufferreceive);
    Toast.makeText(this, receive, Toast.LENGTH_LONG).show(); 
在服务器端,我使用以下命令:

    DataInputStream in = new DataInputStream(clientsock.getInputStream());

    DataOutputStream out = new DataOutputStream(clientsock.getOutputStream());
        in  = new BufferedReader(
              new InputStreamReader(socket.getInputStream()));

        out = new PrintWriter(
              new OutputStreamWriter(socket.getOutputStream()));
试试这个:

out = new PrintWriter(socket.getOutpustStream(),true)
然后使用out.println()发送一行

默认情况下,由于性能原因,在write()调用之后,打印流不会刷新()

因此,如果您不想直接使用flush,那么您必须使用以下“println、printf或format”之一以及启用自动刷新的构造函数


您使用什么类型的流进行输入/输出?@skaffman我添加了above@OsamaJaved我刚才做的一个项目增加了这个工人。我在服务器端启用了自动刷新,在客户端使用了bufferedReader。在构造函数中,将自动刷新设置为true。请注意上面构造函数中的第二个参数,并查看上面的链接以获取更多信息