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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangcy 中级黑马   /  2014-7-13 16:29  /  1176 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yangcy 于 2014-7-13 16:56 编辑

客户端代码:
  1. public class TcpClient {

  2.         public static void main(String[] args) throws UnknownHostException,
  3.                         IOException {
  4.                 //创建一个客户端Socket
  5.                 Socket s = new Socket(InetAddress.getLocalHost().getHostAddress(), 8888);
  6.                 //读取键盘中输入的字符串
  7.                 Scanner sc = new Scanner(System.in);
  8.                 String line = sc.nextLine();
  9.                 //获取客户端输出流,将从键盘中读到的字符串写入输出流
  10.                 OutputStream os = s.getOutputStream();
  11.                 os.write(line.getBytes());
  12.                 //创建客户端输入流,将从服务端返回的内容打印到控制台
  13.                 InputStream in = s.getInputStream();
  14.                 byte[] buf = new byte[1024];
  15.                 int len = in.read(buf);
  16.                 System.out.println(new String(buf, 0, len));
  17.                 s.close();
  18.         }
  19. }
复制代码
服务端代码:

  1. public class TcpServer {

  2.         public static void main(String[] args) {
  3.                 ServerSocket ss = null;
  4.                 Socket s = null;
  5.                 InputStream in = null;
  6.                 OutputStream out = null;
  7.                 try {
  8.                         //创建一个服务端Socket
  9.                         ss = new ServerSocket(8888);
  10.                         //接收客服端的Socket
  11.                         s = ss.accept();
  12.                         //获取客服端输入流
  13.                         in = s.getInputStream();
  14.                         //创建一个StringBuilder容器
  15.                         StringBuilder sb = new StringBuilder();
  16.                         //创建一个直接数组,将读到的字节存入数组中
  17.                         byte[] buf = new byte[1024];
  18.                         int len = -1;
  19.                         while((len = in.read(buf))!=-1){
  20.                                 //将数组转换成字符串,存入StringBuilder容器中
  21.                                 sb.append(new String(buf, 0, len));
  22.                         }
  23.                         //将容器中的字符串反转
  24.                         sb.reverse();
  25.                         //创建一个客户端输出流
  26.                         out = s.getOutputStream();
  27.                         out.write(sb.toString().getBytes());
  28.                 } catch (IOException e) {
  29.                         e.printStackTrace();
  30.                 } finally {
  31.                         try {
  32.                                 s.close();
  33.                                 ss.close();
  34.                         } catch (IOException e) {
  35.                                 e.printStackTrace();
  36.                         }
  37.                 }

  38.         }

  39. }
复制代码

客户端发数据了,服务端怎么接收不到数据啊。郁闷啊。

2 个回复

倒序浏览
客户端调用write方法之后,需要发给服务端一个结束标志,否则的话,服务端一直在阻塞状态。结束标志的代码是s.shutdownOutput()

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
HM汪磊 + 1 赞一个!
yangcy + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
暗影流光 发表于 2014-7-13 16:51
客户端调用write方法之后,需要发给服务端一个结束标志,否则的话,服务端一直在阻塞状态。结束标志的代码 ...

就是这个结束标记的问题,调试了半天,多谢你啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马