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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潘廖明 中级黑马   /  2013-5-1 14:46  /  1079 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 潘廖明 于 2013-5-4 10:20 编辑
  1. package net;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.net.Socket;

  7. public class TcpClient2
  8. {

  9.         /**
  10.          * 需求:从键盘录入数据,通过Tcp协议向服务端发送,服务端接收到后将数据转换成大写字母,然后返回给用户。
  11.          * 数据可以实现不断录入、当遇到指定over字符的时候停止。
  12.          *
  13.          * @param args
  14.          */
  15.         public static void main(String[] args) throws Exception
  16.         { // 新建一个客户端套接字服务,同时指定目的IP与接收端口
  17.                 Socket socket = new Socket("192.168.0.104", 10004);
  18.                 // 新建一个键盘的录入的缓冲区
  19.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  20.                 // 定义一个套接字通信的输入流的缓冲区
  21.                 BufferedReader bufr1 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  22.                 // 定义一个套接字通信的输出流的缓冲区
  23.                 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

  24.                 String str;
  25.                 // 实现从键盘读取数据然后向套接字通信的输出流输出
  26.                 while ((str = bufr.readLine()) != null)
  27.                 {
  28.                         bufw.write(str);
  29.                         bufw.newLine();// 向Socket通信的输出流中输入一个换行标记

  30.                         bufw.flush();// 刷新缓冲区
  31.                        <FONT color=red> //1、会不会数据还没有返回就已经执行ufr1.readLine(),然后输出的结果为空?
  32. </FONT>                        String msg = bufr1.readLine();//A、从服务端读取数据
  33.                         
  34.                         System.out.println("Client=" + msg);//B、打印输出的结果

  35.                 }
  36.                <FONT color=red> /*
  37.                  * 2、把 A、B出的代码注释掉、换成如下代码为什么没结果?
  38.                  *
  39.                  * String str1; while ((str1 = bufr1.readLine()) != null) {
  40.                  * System.out</FONT><FONT color=red>.println</FONT><FONT color=red>(str1); }</FONT>
  41.                  <FONT color=red>*/</FONT>
  42.                 bufr.close();
  43.                 socket.close();

  44.         }

  45. }
复制代码
  1. package net;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;

  8. public class TcpServer2
  9. {

  10.         /**
  11.          * @param args
  12.          */
  13.         public static void main(String[] args) throws Exception
  14.         {
  15.                 // 建立服务套接字,同时指定监听的端口
  16.                 ServerSocket ss = new ServerSocket(10004);
  17.                 // 获取客户端的套接字
  18.                 Socket s = ss.accept();
  19.                 // 打印服务端的IP
  20.                 System.out.println("serverprot----" + s.getInetAddress().getHostAddress());
  21.                 // 定义一个套接字通信的输入流的缓冲区
  22.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));
  23.                 // 定义一个套接字通信的输出流的缓冲区
  24.                 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  25.                 String str1;
  26.                 while ((str1 = bufr.readLine()) != null)// 从输入缓冲区中读取数据,然后将其转换为大写字母
  27.                 {
  28.                         System.out.println("Server端接收的数据=" + str1);
  29.                         bufw.write(str1.toUpperCase());
  30.                         bufw.newLine();
  31.                         bufw.flush();// 刷新缓冲区

  32.                         // bufw.close();
  33.                 }

  34.                 s.close();// 关闭套接字,因为套接字与输入、输出流相关。只要关闭套接字。就不需要在关闭输入、输出流
  35.                 ss.close();// 关闭服务端端套接字

  36.         }

  37. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
刚看感觉是 你while不应该写在里面  写和读应该分两段代码写  我去敲看看
回复 使用道具 举报
这样就有结果了
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.InputStreamReader;
  4. import java.io.OutputStreamWriter;
  5. import java.net.Socket;

  6. public class TcpClient2
  7. {

  8.         /**
  9.          * 需求:从键盘录入数据,通过Tcp协议向服务端发送,服务端接收到后将数据转换成大写字母,然后返回给用户。
  10.          * 数据可以实现不断录入、当遇到指定over字符的时候停止。
  11.          *
  12.          * @param args
  13.          */
  14.         public static void main(String[] args) throws Exception
  15.         { // 新建一个客户端套接字服务,同时指定目的IP与接收端口
  16.                 Socket socket = new Socket("192.168.1.101", 10004);
  17.                 // 新建一个键盘的录入的缓冲区
  18.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  19.                 // 定义一个套接字通信的输入流的缓冲区
  20.                 BufferedReader bufr1 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  21.                 // 定义一个套接字通信的输出流的缓冲区
  22.                 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

  23.                 String str;
  24.                 // 实现从键盘读取数据然后向套接字通信的输出流输出
  25.                 while ((str = bufr.readLine()) != null)
  26.                 {
  27.                         bufw.write(str);
  28.                         bufw.newLine();// 向Socket通信的输出流中输入一个换行标记

  29.                         bufw.flush();// 刷新缓冲区
  30.                 }
  31.                 String str1;
  32.                 while ((str1 = bufr1.readLine()) != null) {
  33.                  System.out.println(str1);
  34.                  }
  35.                 bufr.close();
  36.                 socket.close();

  37.         }

  38. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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