黑马程序员技术交流社区

标题: 网络编程—Tcp 这块我有个问题 [打印本页]

作者: 彭波    时间: 2013-4-4 21:48
标题: 网络编程—Tcp 这块我有个问题
本帖最后由 彭波 于 2013-4-5 16:42 编辑
  1. /*
  2. 需求:建立一个文本转换服务器
  3. 客户端给服务端发送文本,服务端会将文本转成大写在返回
  4. 给客户端
  5. 而且客户端可以不断的尽兴文本转换,当客户端输入over时
  6. 转换结束


  7. 分析:
  8. 客户端:既然是操作设备上的数据,那么就可以使用IO技术,
  9.                          并按照IO的操作规律来思考。
  10. 源:键盘录入
  11. 目的:网络设备,网络输出流。而且操作的是文本数据。可以
  12.             选择字符流
  13.             
  14. 步骤:
  15. 1,建立服务
  16. 2,获取键盘录入
  17. 3,将数据发给服务端
  18. 4,然后取服务端返回的大写数据
  19. 5,结束,关资源

  20. 都是文本数据,可以使用字符流,提高效率,加入缓冲
  21. */
  22. import java.io.*;
  23. import java.net.*;
  24. class TransClient
  25. {
  26.         public static void main(String[] args)throws Exception
  27.         {
  28.                 Socket s = new Socket("114.98.251.139", 10005);
  29.                
  30.                 //定义读取键盘数据的流对象
  31.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  32.                
  33.                 //定义目的,将数据写入到socket输出流,发给服务端
  34.                 BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  35.                
  36.                 //定义一个socket读取流,读取服务端返回的大写信息
  37.                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  38.                
  39.                 String line = null;
  40.                
  41.                 while((line=bufr.readLine()) != null)
  42.                 {
  43.                         if("over".equals(line))
  44.                                 break;
  45.                                 
  46.                         bufOut.write(line);        
  47.                         bufOut.newLine();//换行
  48.                         bufOut.flush();//刷新
  49.                         
  50.                         String str = bufIn.readLine();
  51.                         
  52.                         System.out.println("server: "+str);
  53.                 }
  54.                
  55.                 bufr.close();//关闭键盘录入
  56.                 s.close();
  57.         }        
  58. }

  59. /*
  60. 服务端:
  61. 源:socket读取流
  62. 目的:socket输出流
  63. 都是文本,装饰
  64. */
  65. class TransServer
  66. {
  67.         public static void main(String[] args)throws Exception
  68.         {
  69.                 ServerSocket ss = new ServerSocket(10005);
  70.                
  71.                 Socket s = ss.accept();
  72.                
  73.                 String ip = s.getInetAddress().getHostAddress();
  74.                 System.out.println(ip+"...connect");
  75.                
  76.                 //读取socket 读取流中的数据
  77.                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  78.                
  79.                 //目的:socket输出流,将大写数据写入到socket输出流,并发送给客户端
  80.                 BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  81.         
  82.                 String line = null;
  83.                 while((line=bufIn.readLine()) != null);
  84.                 {
  85.                         System.out.println(line);
  86.                         bufOut.write(line.toUpperCase());        
  87.                         bufOut.newLine();
  88.                         bufOut.flush();
  89.                 }
  90.                
  91.                 s.close();
  92.                 ss.close();
  93.         }
  94. }
复制代码
大家用上面的代码测试下(测试时ip换成你们自己的)。我仔细查看了下,都和老师一样啊,怎么客户端的信息没有发出去啊,都newLine和floush了啊,咋么回事,着急?????
都连接上了,直接上图了
(1) 服务器端,都连接上了,

(2) 客户端,键盘输入字母,回车,没有反应啊{:soso_e118:}


作者: 赵晓东    时间: 2013-4-5 12:07
我擦,楼主这个问题 太难找了 ,我找了足足30分钟,眼都快瞎了

QQ截图20130405120600.png (10.7 KB, 下载次数: 2)

QQ截图20130405120600.png

作者: 彭波    时间: 2013-4-5 16:42
赵晓东 发表于 2013-4-5 12:07
我擦,楼主这个问题 太难找了 ,我找了足足30分钟,眼都快瞎了

嗯,搞得不丑,是这个地方的错误,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2