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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 练习题 中级黑马   /  2014-8-28 11:03  /  1208 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 练习题 于 2014-8-28 11:07 编辑

  1. //这是客户端的代码import java.net.*;
  2. import java.io.*;
  3. class TCPClient2
  4. {
  5. public static void main(String[] args)throws Exception
  6. {

  7.   Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(),10010);
  8.   OutputStream os = socket.getOutputStream();
  9.   os.write("tcp数据来了".getBytes());

  10.   InputStream is = socket.getInputStream();
  11.   byte[] buf = new byte[1024];
  12.   int len = 0;
  13.   String str = "";
  14.   while((len  = is.read(buf))!= -1)
  15.   {
  16.    str = str + new String(buf,0,len);
  17.   }
  18.   System.out.println(str);  socket.close();
  19. }
  20. }//这是服务端的代码
  21. import java.net.*;
  22. import java.io.*;
  23. class TCPServer2
  24. {
  25. public static void main(String[] args) throws Exception
  26. {

  27.   ServerSocket ss = new ServerSocket(10010 );Socket  socket = ss.accept();  //因为这个客户端对象发送数据,那么我们就可以用这个客户端读取数据
  28.   InputStream is = socket.getInputStream();
  29.   byte[] buf = new byte[1024];
  30.   int len = 0;
  31.   String str ="";
  32.   while((len = is.read(buf)) != -1)//阻塞方法
  33.   {
  34.     str += str + new String(buf,0,len);
  35.   }
  36.   System.out.println("IP:"+socket.getInetAddress().getHostAddress()+" 数据:"+str);  //返回数据给客户端
  37.   OutputStream os = socket.getOutputStream();
  38.   
  39.   os.write("服务端数据已经收到,谢谢".getBytes());
  40.   //关闭资源
  41.   socket.close();
  42.   ss.close();
  43.   
  44. }
  45. }
复制代码
看半天实在招不到问题在哪,我这边的问题就是客户端和服务端都出现阻塞的状态,没有任何反应.之前测试客户端给服务端发数据 服务端是可以接受到的,现在就是要让服务端返回数据给客户端,就不行了.  求大神们帮帮忙!

3 个回复

倒序浏览
本帖最后由 依然超级赛亚人 于 2014-8-28 13:11 编辑

你把while这个外套去了,因为你用了循环方式去读写,但是没加结束标记,这简单的几个字不用循环就行,1024的字节数组足够装了,只用read(buf,0,len)再试试吧。
回复 使用道具 举报
见毕老师的视频吧!
楼上说的不错:是因为没有结束标记的原因,自定义结束标记比较麻烦,但Socket提供了这个方法
shutdownOutput()
在Socket客服端和服务端的输出流结束后使用这个方法就好了~
回复 使用道具 举报
依然超级赛亚人 发表于 2014-8-28 13:07
你把while这个外套去了,因为你用了循环方式去读写,但是没加结束标记,这简单的几个字不用循环就行,1024 ...

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