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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北冥有鱼 中级黑马   /  2014-3-12 18:17  /  1206 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

客户端
  1. String line=null;
  2.                         line=bufr.readLine();
  3.                         out.write(line);
  4.                         out.newLine();
  5.                         s.shutdownOutput();
复制代码

服务端
  1. String name;
  2.                         name=in.readLine();
复制代码
写入输出流之后,new了一行,,,服务端readLine应该可以的呀????

模拟客户端登陆问题,,,全部代码如下
客户端
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.net.Socket;

  7. class UserLogin {

  8.         public static void main(String[] args) {
  9.                 Socket s=null;
  10.                 BufferedReader bufr=null;
  11.                 try {
  12.                         s=new Socket("192.168.8.100",10008);
  13.                         bufr=new BufferedReader(new InputStreamReader(System.in));
  14.                         BufferedWriter out=
  15.                                         new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  16.                         BufferedReader in=
  17.                                         new BufferedReader(new InputStreamReader(s.getInputStream()));
  18.                         String line=null;
  19.                         line=bufr.readLine();
  20.                         out.write(line);
  21.                         out.newLine();
  22.                         s.shutdownOutput();
  23.                         line=in.readLine();
  24.                         System.out.println(line);
  25.                 } catch (Exception e) {
  26.                         // TODO: handle exception
  27.                 }finally{
  28.                         if (s!=null) {
  29.                                 try {
  30.                                         s.close();
  31.                                 } catch (IOException e) {
  32.                                         // TODO Auto-generated catch block
  33.                                         e.printStackTrace();
  34.                                 }
  35.                         }
  36.                         if (bufr!=null) {
  37.                                 try {
  38.                                         bufr.close();
  39.                                 } catch (IOException e) {
  40.                                         // TODO Auto-generated catch block
  41.                                         e.printStackTrace();
  42.                                 }
  43.                         }
  44.                 }

  45.         }

  46. }
复制代码

服务端
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.net.ServerSocket;
  9. import java.net.Socket;

  10. class LoginServer {

  11.         public static void main(String[] args) throws IOException {
  12.                 ServerSocket ss=new ServerSocket(10008);
  13.                 while (true) {
  14.                         Socket s=ss.accept();
  15.                         new Thread(new ServerLogin(s)).start();
  16.                 }
  17.         }

  18. }

  19. class ServerLogin implements Runnable{
  20.         private Socket s;
  21.         boolean flag=false;
  22.         ServerLogin(Socket s){
  23.                 this.s=s;
  24.         }
  25.         public void run(){
  26.                 File file=new File("D:\\myclass\\6.txt");
  27.                 BufferedReader bufr=null;
  28.                 try {
  29.                         String ip=new String(s.getInetAddress().getHostAddress());
  30.                         System.out.println(ip+":"+"正在尝试登录");
  31.                         bufr=new BufferedReader(new FileReader(file));
  32.                         BufferedWriter out=
  33.                                         new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  34.                         BufferedReader in=
  35.                                         new BufferedReader(new InputStreamReader(s.getInputStream()));
  36.                         String line=null;
  37.                         String name;
  38.                         name=in.readLine();
  39.                         while ((line=bufr.readLine())!=null) {
  40.                                 if (line.equals(name)) {
  41.                                         flag=true;
  42.                                         break;
  43.                                 }
  44.                         }
  45.                         if (flag) {
  46.                                 System.out.println(name+"登陆成功");
  47.                                 out.write(ip+":"+name+"登录成功");
  48.                         }else{
  49.                                 System.out.println(name+"登录失败");
  50.                                 out.write("用户名错误");
  51.                                 out.newLine();
  52.                         }
  53.                         s.shutdownOutput();
  54.                 } catch (Exception e) {
  55.                         e.toString();
  56.                         throw new RuntimeException("客户登录失败");
  57.                 }finally{
  58.                         if (bufr!=null) {
  59.                                 try {
  60.                                         bufr.close();
  61.                                 } catch (IOException e) {
  62.                                         // TODO Auto-generated catch block
  63.                                         e.printStackTrace();
  64.                                 }
  65.                         }
  66.                 }
  67.         }
  68. }
复制代码






评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

3 个回复

倒序浏览
缓冲----------没刷!!flush

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
一诺千金 发表于 2014-3-12 18:51
缓冲----------没刷!!flush

嗯,是这问题。。。。。。我一直以为那个啥socket.shutdown****有类似作用来着。。。:'(:'(:'(
回复 使用道具 举报
一眼看过去就知道没flush... {:3_52:}  只要定义了缓冲区必须要刷新  close方法在关闭之前会刷新。 s.shutdownOutput(); API:禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 只能表示都写进了缓存区,所以即使关闭,缓冲区里依然有数据。 禁用和关闭概念不一样。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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