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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陌路行者 中级黑马   /  2013-7-14 23:05  /  1434 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陌路行者 于 2013-7-15 14:14 编辑
  1. import java.io.*;
  2. import java.net.*;
  3. class  PicClient
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 Socket s = new Socket("192.168.1.12",8866);

  8.                 BufferedInputStream bis =
  9.                         new BufferedInputStream(new FileInputStream("1.jpg"));

  10.                 BufferedOutputStream bos =
  11.                         new BufferedOutputStream(s.getOutputStream());

  12.                 //byte[] buf = new byte[1024];

  13.                 int len = 0;

  14.                 while((len=bis.read())!=-1)
  15.                 {
  16.                         bos.write(len);
  17.                 }
  18.                 s.shutdownOutput();
  19.                 BufferedInputStream bufIn =
  20.                         new BufferedInputStream(s.getInputStream());

  21.                 //byte[] bufInput = new byte[1024];
  22.                
  23.                 int num = 0;

  24.                 while((num=bufIn.read())!=-1)
  25.                 {
  26.                         System.out.println(num);
  27.                 }

  28.                 bis.close();
  29.                 s.close();
  30.         }
  31. }
  32. class  PicServer
  33. {
  34.         public static void main(String[] args) throws Exception
  35.         {
  36.                 ServerSocket ss = new ServerSocket(8866);
  37.                
  38.                 Socket s = ss.accept();

  39.                 String ip = s.getInetAddress().getHostAddress();

  40.                 System.out.println(ip+".......connected");

  41.                 BufferedInputStream bis =
  42.                         new BufferedInputStream(s.getInputStream());

  43.                 BufferedOutputStream bos =
  44.                         new BufferedOutputStream(new FileOutputStream("2.jpg"));

  45.                 //byte[] buf = new byte[1024];

  46.                 int len = 0;

  47.                 while((len=bis.read())!=-1)
  48.                 {
  49.                         bos.write(len);
  50.                 }
  51.                 BufferedOutputStream bosOut =
  52.                         new BufferedOutputStream(s.getOutputStream());

  53.                 bosOut.write("上传成功".getBytes());

  54.                 bos.close();
  55.                 s.close();
  56.                 ss.close();
  57.         }
  58. }
复制代码
而且还读不到服务端反馈的信息

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

3 个回复

倒序浏览
还没看到通信方面,不过知道一点点,不知道对不对。  你要传的东西不因该是图片的数据吗,怎么会是写长度len?  bos.write(len);。至于为什么接收不到应该是客户端没有等到服务器传过东西过来就执行完了,两边应该是分开的线程,而且不能停的吧
回复 使用道具 举报
本帖最后由 wll_sx1990 于 2013-7-15 10:54 编辑

数据的丢失主要是由于你在传输的时候用的是包装流,所以内部都有个缓冲区,所以,在每次输出完以后一定要记得flush。这样就数据完整,而且有反馈了。代码如下:
  1. package com.getprop;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.FileInputStream;
  5. import java.net.Socket;

  6. class PicClient
  7. {
  8. public static void main(String[] args) throws Exception
  9. {
  10. Socket s = new Socket("127.0.0.1",9999);

  11. BufferedInputStream bis =
  12. new BufferedInputStream(new FileInputStream("1.jpg"));

  13. BufferedOutputStream bos =
  14. new BufferedOutputStream(s.getOutputStream());

  15. //byte[] buf = new byte[1024];

  16. int len = 0;

  17. while((len=bis.read())!=-1)
  18. {
  19. bos.write(len);
  20. bos.flush(); //记得在这里刷
  21. }
  22. s.shutdownOutput();
  23. BufferedInputStream bufIn =
  24. new BufferedInputStream(s.getInputStream());

  25. //byte[] bufInput = new byte[1024];

  26. int num = 0;

  27. System.out.println("echo");
  28. while((num=bufIn.read())!=-1)
  29. {
  30. System.out.println(num); //想不通你这里为什么要把反馈信息当做字节输出来?你能看懂那一个个的数字?
  31. }

  32. bis.close();
  33. s.close();
  34. }
  35. }

  36. package com.getprop;

  37. import java.io.BufferedInputStream;
  38. import java.io.BufferedOutputStream;
  39. import java.io.FileOutputStream;
  40. import java.net.ServerSocket;
  41. import java.net.Socket;

  42. class PicServer
  43. {
  44. public static void main(String[] args) throws Exception
  45. {
  46. ServerSocket ss = new ServerSocket(9999);

  47. Socket s = ss.accept();

  48. String ip = s.getInetAddress().getHostAddress();

  49. System.out.println(ip+".......connected");

  50. BufferedInputStream bis =
  51. new BufferedInputStream(s.getInputStream());

  52. BufferedOutputStream bos =
  53. new BufferedOutputStream(new FileOutputStream("2.jpg"));

  54. //byte[] buf = new byte[1024];

  55. int len = 0;

  56. while((len=bis.read())!=-1)
  57. {
  58. bos.write(len);
  59. bos.flush(); //记得在这里刷
  60. }


  61. BufferedOutputStream bosOut =
  62. new BufferedOutputStream(s.getOutputStream());

  63. bosOut.write("上传成功".getBytes());
  64. bosOut.flush();

  65. bos.close();
  66. s.close();
  67. ss.close();
  68. }
  69. }

复制代码


评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
wll_sx1990 发表于 2013-7-15 10:45
数据的丢失主要是由于你在传输的时候用的是包装流,所以内部都有个缓冲区,所以,在每次输出完以后一定要记 ...

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