有什么方法可以使方法 readline() (来自 bufferedReader)阻塞,直到它实际上有要读取的内容?
我正在创建一个客户端/服务器应用程序 socketBased 我有这个
服务器读取然后写入。客户端写入然后读取..这是客户端/服务器之间的通信(基于套接字)
唯一的问题是在服务器上我正在使用 bufferedReader.readLine() 读取,这不是阻塞方法。我已经尝试用 dataInputstream().read() 替换 bufferedReader.readLine() (处理所有字节内容并在收到 -1 时退出),但它也不起作用。
所有这一切的问题是服务器期望读取但不阻塞。当用户按下按钮时,客户端只会写入服务器(通过套接字)(因此服务器必须等待读取,而事实并非如此)
在服务器端我有这个:
BufferedReader READ = new BufferedReader(new InputStreamReader(skt.getInputStream()));
BufferedWriter WRITE = new BufferedWriter(new OutputStreamWriter(skt.getOutputStream()));
FileInputStream fstream = new FileInputStream(file);
DataInputStream in = new DataInputStream(fstream);
boolean FLAG = true;
String s = new String("#$");
while (FLAG) {
if (skt == null)
FLAG = false;
// READING FROM THE CLIENT
while (!READ.ready()){System.out.println("Blocking")};
while ((s = READ.readLine()) != null) {
System.out.println("RECEIVING: " + s);
System.out.println("$$$");
}
System.out.print("hi");
// READING FROM THE FILE AND SENDING TO THE CLIENT
//WRITTING TO THE CLIENT
while ((strLine = in.readLine()) != null) {
System.out.println("SENDING: " + strLine);
strLine += "\n";
WRITE.write(strLine);
WRITE.flush();
strLine = new String();
}
}
在客户端我有这个:
//READING FROM THE FILE AND SENDING TO THE SERVER
while((strLine = in.readLine()) != null)
{
strLine += "\n";
soma+=strLine.length();
WRITE.write(strLine);
WRITE.flush();
TextArea1.append(strLine);
ProgressBar.setValue(soma);
ProgressBar.repaint();
};
in.close();
ProgressBar.setValue(0);
soma=0;
//READING FROM THE SERVER
while((strLine=READ.readLine()) != null)
{
strLine+="\n";
soma+=strLine.length();
TextArea2.append(strLine);
strLine = new String();
ProgressBar.setValue(soma);
ProgressBar.repaint();
}
in.close();
fstream.close();
WRITE.close();
READ.close();
Skt.close();
注意: Skt 是一个将客户端连接到服务器的套接字。
这里的问题是。当客户端连接到服务器时,服务器期望在连接建立后立即从套接字读取..但是客户端上的代码(写入服务器)仅在用户按下按钮时才会运行..所以,服务器必须被阻塞,直到客户端实际上向套接字写入了一些东西(服务器没有阻塞)。:-/希望这次让我自己更清楚..对不起