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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程有愿 中级黑马   /  2012-8-11 17:16  /  1511 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
import java.net.*;
public class LoginClient {
    public static void main(String[] args) throws Exception
    {
     Socket  s=new Socket("169.254.91.182",10012);
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    // BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
     PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
     BufferedReader br1=new BufferedReader(new InputStreamReader(s.getInputStream()));
    for(int x=0;x<3;x++)
    {
     String line=br.readLine();
     if(line==null)
      break;
     pw.write(line);
   String sr= br1.readLine();
   if(sr.contains("欢迎"))
    break;
   System.out.println(sr);
    }
  
    br.close();
    s.close();
}
}
——————————————————————————————————————————————————————————————————————————
import java.io.*;
import java.net.*;
public class LoginServer {
public static void main(String[] args) throws Exception
{
   ServerSocket ss=new ServerSocket(10012);
   Socket s=ss.accept();
new  Thread(new UserThread(s)).start();
}
}
class UserThread  implements Runnable
{    private Socket s;
     UserThread(Socket s)
     {
      this.s=s;
     }
public void run()
{    String ip=s.getInetAddress().getHostAddress();
      System.out.println(ip+"......connected");
  try{
   for(int x=0;x<3;x++){
    BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
    String  name=br.readLine();
    BufferedReader br1=new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\cop_11.txt"));
    PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
    String  l=null;
    boolean  flag=false;
    while((l=br1.readLine())!=null)
    {   
     System.out.println(l);
     if(l.equals(name))
     {
      flag=true;
      break;
      }
    }
    if(flag=true)
    {
     System.out.println(name+":已登录!");
     pw.write(name+":欢迎!登入成功!");
     break;
    }
    else
    {
     System.out.println(name+":正在尝试登陆!");
     pw.write("用户名不存在,请重新输入!");
     
    }
    s.close();
    }}
  catch(Exception e)
  {
   throw new RuntimeException(ip+"校验失败");
  }
}
}
是按照毕老师的视频来的,可就是运行不了 ,不知道怎么搞的啊?求解释啊   谢谢各位大虾啊

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 看视频要仔细啊,失败往往是因为忽视了细节.

查看全部评分

5 个回复

正序浏览
程有愿 发表于 2012-8-11 18:50
按照你们的改了还是不行!

那就要看看你的“数据库” 路径 什么的了,C:\\Users\\Administrator\\Desktop\\cop_11.txt
代码应该没什么问题了,除非你大小写写错,少个字母,多个字母,少个符号,多个符号,这个就很难找了
回复 使用道具 举报
按照你们的改了还是不行!
回复 使用道具 举报
  1. import java.io.*;
  2. import java.net.*;
  3. public class LoginClient {
  4. public static void main(String[] args) throws Exception
  5. {
  6. <FONT color=red>Socket s=new Socket("169.254.91.182",10012); //注意核对你的电脑的地址,这个是毕老师上课时电脑的IP地址,你自己的电脑建议用127.0.0.1
  7. </FONT>BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  8. // BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  9. PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
  10. BufferedReader br1=new BufferedReader(new InputStreamReader(s.getInputStream()));
  11. for(int x=0;x<3;x++)
  12. {
  13. String line=br.readLine();
  14. if(line==null)
  15. break;
  16. <FONT color=red>pw.write(line);//PrintWrite类中只有printf,println,与format三个方法才有自动刷新功能,所以要用pw.println(line);
  17. </FONT>String sr= br1.readLine();
  18. if(sr.contains("欢迎"))
  19. break;
  20. System.out.println(sr);
  21. }

  22. br.close();
  23. s.close();
  24. }
  25. }
  26. ——————————————————————————————————————————————————————————————————————————
  27. import java.io.*;
  28. import java.net.*;
  29. public class LoginServer {
  30. public static void main(String[] args) throws Exception
  31. {
  32. ServerSocket ss=new ServerSocket(10012);
  33. <FONT color=red>while(true)//一般网站的服务器总是时时开着的,不加while,那么用一次,程序就关闭了
  34. {
  35. </FONT>Socket s=ss.accept();
  36. new Thread(new UserThread(s)).start();
  37. <FONT color=red>}
  38. </FONT>}
  39. }
  40. class UserThread implements Runnable
  41. { private Socket s;
  42. UserThread(Socket s)
  43. {
  44. this.s=s;
  45. }
  46. public void run()
  47. { String ip=s.getInetAddress().getHostAddress();
  48. System.out.println(ip+"......connected");
  49. try{
  50. for(int x=0;x<3;x++){
  51. BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
  52. String name=br.readLine();
  53. BufferedReader br1=new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\cop_11.txt"));
  54. PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
  55. String l=null;
  56. boolean flag=false;
  57. while((l=br1.readLine())!=null)
  58. {
  59. System.out.println(l);
  60. if(l.equals(name))
  61. {
  62. flag=true;
  63. break;
  64. }
  65. }
  66. if(flag=true)
  67. {
  68. System.out.println(name+":已登录!");
  69. pw.write(name+":欢迎!登入成功!");
  70. break;
  71. }
  72. else
  73. {
  74. System.out.println(name+":正在尝试登陆!");
  75. <FONT color=red>pw.write("用户名不存在,请重新输入!");//同上,使用println方法

  76. </FONT>}
  77. <FONT color=red>}
  78. </FONT>s.close();//将s关闭的代码写在for循环外面
  79. }
  80. <FONT color=red>//}
  81. </FONT>catch(Exception e)
  82. {
  83. throw new RuntimeException(ip+"校验失败");
  84. }
  85. }
  86. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
额  ,应该是这样的  ,谢谢!
回复 使用道具 举报
本帖最后由 张雪磊 于 2012-8-11 17:49 编辑

import java.io.*;
import java.net.*;
public class LoginClient {
    public static void main(String[] args) throws Exception
    {
     Socket  s=new Socket("169.254.91.182",10012);
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    // BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
     PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
     BufferedReader br1=new BufferedReader(new InputStreamReader(s.getInputStream()));
    for(int x=0;x<3;x++)
    {
     String line=br.readLine();
     if(line==null)
      break;
     pw.write(line);
/*
PrintWriter是打印流,他的write方法覆盖了Writer的write方法,所以你要写入数据时需要把它从缓冲区刷新
而我们既然用到打印流,就是希望使用它比别的流更方便的方法,上面蓝色部分里构造函数的true参数就表示
当你使用 println、printf 或 format 这几个方法的时候,他会自动把数据刷新输出缓冲区,所以这里,包括下

面的红色部分都应该使用println(line)方法
*/

   String sr= br1.readLine();
   if(sr.contains("欢迎"))
    break;
   System.out.println(sr);
    }
  
    br.close();
    s.close();
}
}
——————————————————————————————————————————————————————————————————————————
import java.io.*;
import java.net.*;
public class LoginServer {
public static void main(String[] args) throws Exception
{
   ServerSocket ss=new ServerSocket(10012);

//另外这里应该加一个while循环,你肯定不希望你的服务器每次只能有一个客户连接进来吧?用一个循环,来接受客户的连接,
//连接上来一个就会创建一个线程,这样才能为多个客户服务,否则只能当为一个客户服务完之后才能为其他客户服,
//如果一个网站这么干的话,一个人连接,其他人只能等待,那还有谁愿意访问呢?

while(true){
   Socket s=ss.accept();
new  Thread(new UserThread(s)).start();
}
}
}
class UserThread  implements Runnable
{    private Socket s;
     UserThread(Socket s)
     {
      this.s=s;
     }
public void run()
{    String ip=s.getInetAddress().getHostAddress();
      System.out.println(ip+"......connected");
  try{
   for(int x=0;x<3;x++){
    BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
    String  name=br.readLine();
    BufferedReader br1=new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\cop_11.txt"));
    PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
    String  l=null;
    boolean  flag=false;
    while((l=br1.readLine())!=null)
    {   
     System.out.println(l);
     if(l.equals(name))
     {
      flag=true;
      break;
      }
    }
    if(flag=true)
    {
     System.out.println(name+":已登录!");
     pw.write(name+":欢迎!登入成功!");
     break;
    }
    else
    {
     System.out.println(name+":正在尝试登陆!");
     pw.write("用户名不存在,请重新输入!");
     
    }
    s.close();
    }}
  catch(Exception e)
  {
   throw new RuntimeException(ip+"校验失败");
  }
}
}

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马