while ((len = is.read(buffer, 0, buffer.length)) != -1)
{
str += new String(buffer, 0, len);
}启动服务器,执行到循环的时候,最程序就一直在等客户端发数据,客户端发送数据后,服务器就在while循环的判断语句中执行了一句,is.read(buffer,0,buffer.length),循环中 str += new String(buffer, 0, len);处理后,又在等客户端发送数据,但是!你while判断的是is.read()!=-1,而,客户端发送任何数据,都不能让is.read()==-1,所以循环始终不会结束,也就一直卡着了。
这时, 你把客户端关闭,服务器端肯定会输出数据。
因为客户端关闭,就相当于把流关闭,关闭流时,流会发送-1这个标记出去,服务器接收到,就循环结束,就打印数据了。
改成这样:
public class ServerTest
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(4000);
Socket socket = ss.accept();
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = "";
byte[] buffer = new byte[1024];
String len = null;
while ((len = is.readLine()) !=null)
{
if("over".equals(len)){
System.out.println("客户端发送数据为:" + str);
break;
}
str += len;
}
OutputStream os = socket.getOutputStream();
os.write("hello".getBytes());
socket.close();
}
}
--------客户端-----------
public class ClientTest
{
public static void main(String[] args) throws Exception
{
Socket socket = new Socket("127.0.0.1", 4000);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter os = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String str =null;
while(true){
str = br.readLine();
os.write(str);
os.newLine();
os.flush();
if("over".equals(str))
break;
}
InputStream is = socket.getInputStream();
int len = 0;
byte[] buffer = new byte[1024];
String strServ = "";
while ((len = is.read(buffer, 0, buffer.length)) != -1)
{
if(new String(buffer, 0, len)=="over")
break;
strServ += new String(buffer, 0, len);
}
System.out.println("服务器发送数据为:" + strServ);
os.close();
socket.close();
}
} |