Socket 编程小问题--PrintWriter的flush方法只能刷新一次

ZHFIFA 2010-09-13 10:09:35
我正在做一个简单的C/S小程序。客户端发消息,服务端接受。源代码如下:
客户端

import java.net.*;
import java.io.*;

public class P2PClientManager {
private final int PortNum=4700;
private final String UserHint="Please input your server address or name:";
private final String ConnectionSuccess="Server connected successfully!\nPlease enter your message:";
private final String EndMessageTag="end";

public void StartClient() throws IOException
{
BufferedReader serverAddressBuffer = new BufferedReader(new InputStreamReader(System.in));
System.out.println(UserHint);
String serverAddress= serverAddressBuffer.readLine().toUpperCase().trim();
try
{
Socket clientSocket = new Socket(serverAddress, PortNum);
if(clientSocket.isConnected())
{
System.out.println(ConnectionSuccess);

BufferedReader userClientInputBuffer=new BufferedReader(new InputStreamReader(System.in));

PrintWriter outStream = new PrintWriter (clientSocket.getOutputStream());
String userInput=userClientInputBuffer.readLine();

while(!userInput.toLowerCase().equals(EndMessageTag))
{
outStream.println(userInput);
outStream.flush();

userInput=userClientInputBuffer.readLine();

}


outStream.close();
clientSocket.close();
}
}
catch(Exception ex)
{
System.out.println("Error:"+ex);
}

}
}


服务端:

import java.net.*;
import java.io.*;

public class P2PServerManager {
private final int PortNum=4700;

public void StartServer() throws IOException
{
ServerSocket serverSocket = new ServerSocket(PortNum);

while (true)
{
Socket socketClient = serverSocket.accept();
System.out.println(socketClient.getInetAddress());
BufferedReader clientSendContent = new BufferedReader(new InputStreamReader(
socketClient.getInputStream()));

System.out.println(clientSendContent.readLine());

}
}
}


问题:现在程序运行后,在客户端输入消息,服务端可以接收,但是只能接收一次,当我继续在客户端输入文字的时候,服务端却不能显示我的输入数据。。。

请问各位大虾,我改如何改。十分感谢
...全文
322 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
waison0918 2011-03-08
  • 打赏
  • 举报
回复
System.out.println(clientSendContent.readLine());

因为你这里只从输入流中读出其中一行,应该像客户端一样设定一个循环来重复读入啊
tanwan 2010-09-13
  • 打赏
  • 举报
回复
Socket socketClient = serverSocket.accept();

执行到accept程序会在这里等待吧...所以你移到while外面去...

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧