黑马程序员技术交流社区

标题: 【已解决】求解tcp socket [打印本页]

作者: yangcy    时间: 2014-7-13 16:29
标题: 【已解决】求解tcp socket
本帖最后由 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. }
复制代码

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

作者: 暗影流光    时间: 2014-7-13 16:51
客户端调用write方法之后,需要发给服务端一个结束标志,否则的话,服务端一直在阻塞状态。结束标志的代码是s.shutdownOutput()
作者: yangcy    时间: 2014-7-13 16:55
暗影流光 发表于 2014-7-13 16:51
客户端调用write方法之后,需要发给服务端一个结束标志,否则的话,服务端一直在阻塞状态。结束标志的代码 ...

就是这个结束标记的问题,调试了半天,多谢你啊。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2