【发布时间】:2013-07-12 21:28:46
【问题描述】:
我是一个初学者程序员,所以这可能很明显,我忽略了答案。但问题是。
我有一个由两部分组成的程序(它比这个例子复杂一点,但情况是一样的)。该程序在客户端和服务器之间触发了多条消息。我在服务器端有一个 PrintWriter 来向客户端发送消息,在客户端,我有一个 BufferedReader 来读取发送的消息。 运行此示例时,我得到两行作为输出。第一个消息是两个消息,第二个是 NULL。我想知道是否有一种方法可以基本上停止服务器,直到我准备好接收第二条消息,这样我就可以在发送第二条消息之前在客户端做一些事情。
我希望不要使用Thread.Sleep,因为我宁愿服务器等到客户端说它准备好了。
这是客户:
public class Client{
public void run(){
Socket socket = null;
InputStream in = null;
BufferedReader reader = null;
try{
socket = new socket("LocalHost",1234);
in = socket.getInputStream();
reader = new BufferedReader(new InputStreamReader(in));
}
String messageFromServer = "";
try{
messageFromServer=reader.readLine();
}
System.out.println(messageFromServer);
String messageFromServer = "";
try{
messageFromServer=reader.readLine();
}
System.out.println(messagefromServer);
//close everything
}
}
这是服务器:
public class Server{
public void run(){
ServerSocket server = null;
Socket client = null;
try{
server = new ServerSocket(1234);
client = server.accept();
}
PrintWriter writer = null;
OutputStream out = null;
try{
out = client.getOutputStream();
writer = new PrintWriter(out, true);
}
writer.write("Hi I'm a server");
//do some stuff that takes some time, user input, etc. etc.
writer.write("I'm still a server");
//close everything
}
谢谢:)
【问题讨论】:
-
你的客户端可以发送一个ACK消息,服务器线程会等待它再发送另一个消息。
-
你可以使用池化机制,让客户端轮询服务器
-
所以你想让你的服务器
"SLEEP"而不使用Thread.Sleep? -
我强烈建议你停下来仔细阅读Java Socket Tutorials
-
此代码无法编译。您不需要在阻塞网络代码时睡觉。如果您从
readLine()获得null,则对等方已关闭连接。不清楚你在问什么。
标签: java sockets bufferedreader printwriter