求指导,尚学堂 马士兵上课讲的那个小程序TalkServer/TalkClient有点问题搞不懂

你好达西0601 2015-07-25 09:09:37
单独用OutputStreamWrite()读取时可以的,但是放到这个for循环里就不可以了。
过程:连接服务器之后,首先client端发送一个消息到Server端,用write()方法(即注释掉的方法不可以),而用PrintWriter的println()方法就可以成功,两者有什么区别吗?马士兵老师课堂上讲的是第二种方法自己尝试别的方法出错!
具体代码:
TCP编程 服务器端:
public class TalkServer {

public static void main(String[] args){
try {
ServerSocket ss=new ServerSocket(6666);
Socket s=ss.accept();

System.out.println("hello client "+s.getInetAddress());
InputStreamReader cisr = new InputStreamReader(s.getInputStream());
BufferedReader cbfr=new BufferedReader(cisr);
System.out.println("client: "+cbfr.readLine());

InputStreamReader sisr= new InputStreamReader(System.in);
BufferedReader sbr=new BufferedReader(sisr);
String str=sbr.readLine();

//OutputStreamWriter osw;
//osw=new OutputStreamWriter(s.getOutputStream());
PrintWriter spr=new PrintWriter(s.getOutputStream());
while(! str.equals("bye")) {
spr.println(str);
spr.flush();
// osw.write(str);
// osw.flush();

System.out.println("server:"+str);
System.out.println("client: "+cbfr.readLine()); //客户端再读入一行
str=sbr.readLine();
}
sbr.close();
//osw.close();
// spr.close();
cisr.close(); cbfr.close();
s.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

客户端程序
public class TalkClient {
public static void main(String[] args){

try {
Socket s=new Socket("localhost",6666);

InputStreamReader cisr =new InputStreamReader(System.in);
BufferedReader cbr=new BufferedReader(cisr);
String str=cbr.readLine();

// OutputStreamWriter osw=new OutputStreamWriter(s.getOutputStream()) ;
//!!!这里使用PrintWriter()而使用osw.write()区别???为什么使用这种方法server端接收不到数据?相互发送不成功???
// BufferedWriter sbw=new BufferedWriter(osw);;

PrintWriter pw=new PrintWriter(s.getOutputStream());

InputStreamReader sin =new InputStreamReader(s.getInputStream());
BufferedReader sbr=new BufferedReader(sin);

while(! str.equals("bye")) {
pw.println(str);
pw.flush();
// sbw.write(str);
// sbw.flush();
System.out.println("client: "+str);
System.out.println("server: "+sbr.readLine());
str=cbr.readLine();
}

cbr.close(); sin.close(); sbr.close();
//pw.close();
s.close();

} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
...全文
192 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
你好达西0601 2015-08-10
  • 打赏
  • 举报
回复
遇到问题还是搜索具体的解决方案比较靠谱,在2002年的一个 帖子里有答案,虽然不知道为什么。。。 我也在这里感谢路人甲 以客户端为例: 更改为: sbw.write(str); sbw.flush(); sbw.newLIne(); sbw.flush(); 解决
你好达西0601 2015-08-07
  • 打赏
  • 举报
回复
为什么没有人看到???郁闷还没有解决!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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