我无法使用java从客户端获取服务器中的数据 以下是我的服务器代码:
public void UpdateClients() throws Exception{
Socket socktmp=null;
try
{
socktmp= mainSocket.accept();
rdr= new BufferedReader( new InputStreamReader(socktmp.getInputStream()));
String t="";
String name="";
while((t=rdr.readLine())!=null){ <<<<< **it stops here**
name=t;
}
//rdr.close();
LstClient.AddClient(name, socktmp);
objwriter = new ObjectOutputStream(socktmp.getOutputStream());
objwriter.writeObject(LstClient.clients);
objwriter.flush();
objwriter.close();
}
catch(Exception ex){
throw new Exception("Unable to Update Clients. Error :" + ex.getMessage());
}
finally{
try{
if(mainSocket!=null){
mainSocket.close();
}
if(socktmp!=null){
socktmp.close();
}
if(rdr!=null)
{
rdr.close();
}
if(objwriter!=null)
{
objwriter.close();
}
}
catch(Exception ex1){
throw new Exception("Unable to close streams after opeining. Error :"+ ex1.getMessage());
}
}
}
以下是我的客户代码:
public Client(String serverIp,int port,String name) throws Exception{
try{
if(mainSock!=null){
mainSock.close();
}
mainSock= new Socket(serverIp, port);
writer= new BufferedWriter(new OutputStreamWriter(mainSock.getOutputStream()));
writer.write(name);
writer.flush();
**//writer.close();**
Thread.sleep(1500);
objin = new ObjectInputStream(mainSock.getInputStream());
Hashtable<String,Socket> lst= new Hashtable<String , Socket>();
lst = (Hashtable<String, Socket>) objin.readObject();
cl = new LstClient();
LstClient.clients = lst;
System.out.println(LstClient.clients.size());
objin.close();
}
catch(Exception ex){
throw new Exception("Error : "+ ex.getMessage());
}
finally{
if(mainSock!=null){
mainSock.close();
}
if(writer!=null){
writer.close();
}
if(objin!=null){
objin.close();
}
}
}
当我在客户端关闭编写器时,我只获取服务器端的数据或光标在服务器端的读取行上。但是当我在客户端关闭写入器后尝试读取时,它表示套接字已关闭,因此没有关闭它在服务器端的readline上暂停 请帮忙
答案 0 :(得分:3)
使用readLine时我常犯的错误是忘记发送新行。
您发送的文字没有新行,即\n
,但等待它发送完毕。
尝试添加write('\n');
答案 1 :(得分:1)
因为您正在使用readLine()
进行阅读,这将阻止它进入回车符。在名称末尾添加'\ n'。或者更好的是,使用PrintWriter
并使用println