0

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

  • 如果由out.flush() 发送;方法然后客户端可以读取它,但是
  • 当我使用该方法时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()));
4

1 回答 1

0

试试这个:

out = new PrintWriter(socket.getOutpustStream(),true)

然后使用 out.println() 发送一条线?

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

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

http://docs.oracle.com/javase/6/docs/api/java/io/PrintWriter.html

于 2012-05-11T09:28:19.053 回答