黑马程序员技术交流社区
标题:
服务端从键盘录入数据,客户端转成大写,返给服务端,.....
[打印本页]
作者:
谢冬
时间:
2013-3-12 23:09
标题:
服务端从键盘录入数据,客户端转成大写,返给服务端,.....
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ClientDemo2 {
public static void main(String[] args) throws IOException {
Socket s = new Socket("192.168.1.101", 10010);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
String line = null;
while((line = br.readLine()) != null)
{
if("over".equals(line))
break;
pw.println(line);
pw.flush();
}
BufferedReader br1 = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw1 = new PrintWriter(System.out, true);
String newLine = null;
while((newLine = br1.readLine()) != null)
{
pw1.println(newLine);
pw1.flush();
}
pw1.close();
br.close();
s.close();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo2 {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10010);
Socket s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream());
String line = null;
while((line = br.readLine()) != null)
{
pw.println(line.toUpperCase());
pw.flush();
}
pw.close();
s.close();
}
//输入over以后,能够转成大写,但是程序并没有结束,这是为什么?
复制代码
作者:
夏晓彤
时间:
2013-3-12 23:24
这程序只关闭了客户端,并没有关闭服务器 s.close();是关闭客户端
ss.close()才是关闭服务器,但是一般都不会关闭服务器的,只要关闭客户端就可以了,试想你访问新浪,访问新浪,客户端用户访问一次服务器就关闭了,那其他哥们姐妹们就要去喝西北风去了,新浪不得亏死啊
作者:
HM黄祥为
时间:
2013-3-13 00:31
while((newLine = br1.readLine()) != null)//实际上你的程序是运行到这个地方开始阻塞的 即卡住了 从而导致客户端程序无法退出
{
pw1.println(newLine);
pw1.flush();
}
pw1.close();
br.close();
s.close();
}
为什么你的程序会在那里卡住了呢 首先由于你的流在读取的时候没有关闭 而 br1.readLine() 这里你使用的是readline的方法 即读取一行数据 何为一行 即 直到读取到有行结束符时 这个方法才会返回 否则会一直阻塞
这样明白了吧 就是说 你这里服务端和客户端之间的流并未关闭 并且 服务端又没有发送换行符 所以 这个方法就阻塞了 程序自然不会结束
其实你可以使用br1.ready() 这个方法 来判断这个流是否为空 把这个方法调用放在while循环前 判断下 如果为false则流为空 或者 无法读取 这是 你直接关闭socket即可推出程序
作者:
陈丽莉
时间:
2013-3-13 05:26
试试,二楼的方法是否奏效,若还有问题,请继续追问~ 若没有问题了,记得回复二楼的方法是否管用,然后将帖子分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2