黑马程序员技术交流社区

标题: 关于TCP传输 问题 [打印本页]

作者: 李慧声    时间: 2013-10-3 23:16
标题: 关于TCP传输 问题
本帖最后由 李慧声 于 2013-10-4 21:35 编辑

复制代码
各位看看 这个是毕姥爷第24天里面的关于tcp传输的最后一个例子,自己模仿写的,不知道哪里错了,求指点
  1. class LoginClient
  2. {
  3.         public static void main(String[] args) throws Exception
  4.         {
  5.                 Socket s = new Socket("127.0.0.1", 10000);
  6.                 BufferedReader bufr =
  7.                         new BufferedReader(new InputStreamReader(System.in));

  8.                 PrintWriter out =
  9.                         new PrintWriter(s.getOutputStream(), true);

  10.                 BufferedReader bufIn =
  11.                         new BufferedReader(new InputStreamReader(s.getInputStream()));

  12.                 for(int x = 0; x < 3; x++)
  13.                 {
  14.                         String line = bufr.readLine();
  15.                         if(line == null)
  16.                                 break;
  17.                         out.println(line);

  18.                         String info = bufIn.readLine();
  19.                         System.out.println("info : " + info);
  20.                         if(info.contains("欢迎"))
  21.                                 break;
  22.                 }

  23.                 bufr.close();
  24.                 s.close();
  25.         }
  26. }

  27. class UserThread implements Runnable
  28. {
  29.         private Socket s;
  30.         UserThread(Socket s)
  31.         {
  32.                 this.s = s;
  33.         }

  34.         public void run()
  35.         {
  36.                 try {
  37.                                 BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
  38.                                 for(int x = 0; x < 3; x++)
  39.                                 {
  40.                                         BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  41.                                         String name = bufIn.readLine();

  42.                                         String line = null;
  43.                                        
  44.                                         PrintWriter out = new PrintWriter(s.getOutputStream(),true);


  45.                                         boolean flag = false;
  46.                                         while((line = bufr.readLine()) != null)
  47.                                         {
  48.                                                 if(line.equals(name))
  49.                                                 {
  50.                                                         flag = true;
  51.                                                         System.out.println("name === " + name + "line == " + line);
  52.                                                         break;
  53.                                                 }
  54.                                         }

  55.                                         if(flag)
  56.                                         {
  57.                                                 System.out.println(name + ", 已登录");
  58.                                                 out.println(name + ",欢迎光临");
  59.                                                 break;
  60.                                         }
  61.                                         else
  62.                                         {
  63.                                                 System.out.println(name + ", 正在尝试登录");
  64.                                                 out.println(name + ",用户不存在");                        
  65.                                         }
  66.                                 }
  67.                                 bufr.close();
  68.                                 s.close();
  69.                 }
  70.                 catch (Exception e) {
  71.                         throw new RuntimeException("失败");
  72.                 }
  73.         }
  74. }
  75. class LoginServer
  76. {
  77.         public static void main(String[] args) throws Exception
  78.         {
  79.                 ServerSocket ss = new ServerSocket(10000);
  80.                 while(true)
  81.                 {
  82.                         Socket s = ss.accept();
  83.                         new Thread(new UserThread(s)).start();
  84.                 }
  85.         }
  86. }
复制代码
user.txt中的内容
zhangsan
lisi
wangwu
sunba
zhouqi


我的执行结果:

服务端.jpg (30.67 KB, 下载次数: 22)

服务端

服务端

客户端.jpg (28.05 KB, 下载次数: 16)

客户端

客户端

作者: yzarc    时间: 2013-10-4 00:16
是你服务器端 BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));的位置不对
你这句放在for外了,如果输入不存在的user,循环一次后,bufr的偏移量已经到user.txt的结尾了

要么移到for内,要么读完uers.txt后保存起来
作者: 深情小建    时间: 2013-10-4 10:24
  1. /*
  2. 客户端通过键盘录入用户名
  3. 服务端对这个用户名进行校验

  4. 如果该用户存在,在服务端显示xxx,已登陆
  5. 并在客户端显示xxx,欢迎光临

  6. 如果该用户不存在,在服务端显示xxx,尝试登陆
  7. 并在客户端显示xxx,该用户不存在

  8. 最多就登陆三次
  9. */

  10. import java.io.*;
  11. import java.net.*;
  12. class LoginClient
  13. {
  14.         public static void main(String[] args) throws Exception
  15.         {
  16.                 Socket s = new Socket("192.168.0.103",10008);
  17.                
  18.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  19.                
  20.                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  21.                
  22.                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  23.                
  24.                 for(int x=0;x<3;x++)
  25.                 {
  26.                         String line = bufr.readLine();
  27.                         if(line==null)
  28.                                 break;
  29.                         out.println(line);
  30.                        
  31.                         String info = bufIn.readLine();
  32.                         System.out.println("info:"+info);
  33.                         if(info.contains("欢迎"))
  34.                                 break;
  35.                 }
  36.                
  37.                 bufr.close();
  38.                 s.close();
  39.         }
  40. }

  41. class UserThread implements Runnable
  42. {
  43.         private Socket s;
  44.         UserThread(Socket s)
  45.         {
  46.                 this.s = s;
  47.         }
  48.         public void run()
  49.         {
  50.                 String ip = s.getInetAddress().getHostAddress();
  51.                 System.out.println(ip+"....connected");
  52.                 try
  53.                 {
  54.                         for(int x=0;x<3;x++)
  55.                         {
  56.                                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  57.                                
  58.                                 String name = bufIn.readLine();
  59.                                 if(name==null)
  60.                                         break;
  61.                                
  62.                                 BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
  63.                                
  64.                                 PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  65.                                
  66.                                 String line = null;
  67.                                
  68.                                 boolean flag = false;
  69.                                 while((line=bufr.readLine())!=null)
  70.                                 {
  71.                                         if(line.equals(name))
  72.                                         {
  73.                                                 flag = true;
  74.                                                 break;
  75.                                         }
  76.                                 }
  77.                                 if(flag)
  78.                                 {
  79.                                         System.out.println(name+",已登陆");
  80.                                         out.println(name+",欢迎光临");
  81.                                         break;
  82.                                 }
  83.                                 else
  84.                                 {
  85.                                         System.out.println(name+",尝试登陆");
  86.                                         out.println(name+",用户名不存在");
  87.                                        
  88.                                 }
  89.                         }
  90.                         s.close();
  91.                 }
  92.                 catch(Exception e)
  93.                 {
  94.                         throw new RuntimeException(ip+"校验失败");
  95.                 }
  96.         }
  97. }

  98. class LoginServer
  99. {
  100.         public static void main(String[] args) throws Exception
  101.         {
  102.                 ServerSocket ss = new ServerSocket(10008);
  103.                
  104.                 while(true)
  105.                 {
  106.                         Socket s = ss.accept();
  107.                        
  108.                         new Thread(new UserThread(s)).start();
  109.                 }
  110.         }
  111. }
复制代码

作者: chensc    时间: 2013-10-4 12:25
学习学习!
作者: 乔兵    时间: 2013-10-4 12:44
如果问题已经解决,请重新编辑帖子,修改帖子的主题分类为“提问结束”{:soso_e181:}
作者: 李慧声    时间: 2013-10-4 21:32
yzarc 发表于 2013-10-4 00:16
是你服务器端 BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));的位置不对
你这句 ...

搞定了,确实是,谢谢哈!





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