A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JJJD 中级黑马   /  2015-6-20 11:21  /  378 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

我的基础测试题,多多指导!
  1. package com.itheima;

  2. import java.io.*;
  3. import java.net.*;

  4. /**
  5. * 第十题:使用TCP协议完成一个客户端一个服务器。
  6. *                 客户端从键盘输入读取一个字符串,发送到服务器。
  7. *                 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
  8. *
  9. * @author JuJiaojie
  10. *
  11. */

  12. /*
  13. *思路:
  14. *1.客户端:源-键盘录入     目的-网络输出流      操作字符串-选择字符流
  15. *2.服务器端:源-输入流     目的-输出流
  16. *3.为提高效率,加入缓冲
  17. *
  18. *客户端步骤:
  19. *1.建立socket服务
  20. *2.获取键盘录入
  21. *3.将数据发送给服务器。
  22. *4.获取服务端返回的数据,并打印
  23. *5.关闭客户端资源
  24. *
  25. * 服务器端步骤:
  26. *1.建立服务器socket服务
  27. *2.获取客户端对象
  28. *3.读取客户端发送过来的数据
  29. *4.将读取到的字符串反转
  30. *5.获取Socket流中的输出流,将反转后的字符串写到该输出流
  31. *6.关闭客户端资源,关闭服务器端资源
  32. *
  33. */

  34. //服务器端
  35. class TcpServer
  36. {
  37.         public static void main(String[] args)throws Exception
  38.         {               
  39.                         //建立服务器端Socket服务,并监听一个端口
  40.                         ServerSocket ss=new ServerSocket(8089);
  41.                        
  42.                         //通过accept方法获取连接过来的客户端对象
  43.                         Socket s1=ss.accept();
  44.                        
  45.                         //获取IP,打印IP连接上的标志
  46.                         String ip=s1.getInetAddress().getHostAddress();
  47.                        
  48.                         System.out.println(ip+"......connected");
  49.                        
  50.                         //读取socket读取流中的数据
  51.                         BufferedReader server_bufIn=
  52.                                         new BufferedReader(new InputStreamReader(s1.getInputStream()));
  53.                                        
  54.                         //将数据写入socket输出流,并发送给客户端
  55.                         BufferedWriter server_bufOut=
  56.                                         new BufferedWriter(new OutputStreamWriter(s1.getOutputStream()));
  57.                        
  58.                         //定义读取的一行数据
  59.                         String str2=null;
  60.                                
  61.                         //当读取的数据不为空时
  62.                         while((str2=server_bufIn.readLine())!=null)
  63.                         {
  64.                                
  65.                                 //以字符串形式打印读取到的数据
  66.                                 System.out.println("客户端:"+str2);
  67.                                
  68.                                 //调用reverse,对字符串进行反转,打印
  69.                                 System.out.println("反转后的:"+reverse(str2));
  70.                                
  71.                                 //将反转后的字符串写到该输出流
  72.                                 server_bufOut.write(reverse(str2));
  73.                                
  74.                                 //server_bufOut.write(str2.toUpperCase());
  75.                                                
  76.                                 //换行。因为字符存储在缓冲区,所以要刷新
  77.                                 server_bufOut.newLine();
  78.                                 server_bufOut.flush();       
  79.                         }       
  80.        
  81.                                 s1.close();
  82.                                 ss.close();
  83.                        
  84.                        
  85.         }
  86.        
  87.         //字符串反转
  88.         public static String reverse(String str)
  89.         {
  90.                 if(str !=null && str !="")
  91.                 {
  92.                         StringBuffer buf=new StringBuffer(str);
  93.                         buf.reverse();
  94.                         return buf.toString();
  95.                 }
  96.                 else
  97.                 {
  98.                         return "";
  99.                 }
  100.         }
  101. }

  102. //客户端
  103. class TcpClient
  104. {
  105.         public static void main(String[] args)throws Exception
  106.         {       
  107.                         //建立客户端Socket服务
  108.                         Socket s=new Socket("127.0.0.1",8089);
  109.                        
  110.                         //定义读取键盘数据的流对象
  111.                         BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
  112.                        
  113.                         //定义目的:将数据写入到socket输出流,发给服务端
  114.                         BufferedWriter client_bufOut=
  115.                                         new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  116.                                        
  117.                        
  118.                         //定义一个socket读取流,读取服务端返回的反转字符串
  119.                         BufferedReader client_bufIn=
  120.                                         new BufferedReader(new InputStreamReader(s.getInputStream()));
  121.        
  122.                        
  123.                         String strkey=null;
  124.                        
  125.                         //读取键盘录入数据
  126.                         while((strkey=bufr.readLine())!=null)
  127.                         {
  128.                                 if("over".equals(strkey))
  129.                                         break;
  130.                                
  131.                                 //将键盘录入数据写入输出流输出
  132.                                 client_bufOut.write(strkey);
  133.                                 client_bufOut.newLine();
  134.                                 client_bufOut.flush();
  135.                                
  136.                                 //读取服务端返回的数据
  137.                                 String str1=client_bufIn.readLine();
  138.                        
  139.                                 //打印读取到的服务器返回数据
  140.                                 System.out.println("Server:"+str1);
  141.                         }
  142.                                                        
  143.                                 //关闭键盘录入
  144.                                 bufr.close();
  145.                                
  146.                                 //关闭客户端资源
  147.                                 s.close();
  148.                        
  149.                
  150.         }

  151.        
  152. }
复制代码




4 个回复

倒序浏览
炫?还是让人检查?
回复 使用道具 举报
新人贴,必须顶
回复 使用道具 举报
可以的啊,这应该可以通过的
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马