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
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。请注意上面构造函数中的第二个参数,并查看上面的链接以获取更多信息