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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dsh 中级黑马   /  2014-10-13 18:18  /  1121 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 dsh 于 2014-10-13 18:21 编辑

我的问题是上传图片,丢失了一部分.
  1. <FONT color=black>package TCP_UploadPicture;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.BufferedReader;
  5. import java.io.FileInputStream;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.net.InetAddress;
  9. import java.net.Socket;

  10. /*
  11. *需求:在客户端向服务器端发送文件,当服务器接受完后,给客户端反馈一个上传成功的信息
  12. *客户端思路:
  13. *1.创建一个Socket对象,明确服务器端的ip和端口
  14. *2.源 文件 从指定位置读取文件 字符输入流 或者 字节输入流
  15. *3.目的 Socket 将读取的文件 发送到 服务器端 注意:当发送完数据后,给服务器端发送一个结束标记,告诉服务器以及上传完
  16. *4.源 网络 读取服务器端发送过来的反馈信息
  17. *5.目的 显示屏 将反馈信息显示
  18. *6.关闭资源
  19. */
  20. public class Client {

  21. public static void main(String[] args) throws IOException {
  22. // *1.创建一个Socket对象,明确服务器端的ip和端口
  23. Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 10010);

  24. // *2.源 文件 从指定位置读取文件 字符输入流 或者 字节输入流
  25. //BufferedReader br = new BufferedReader(new FileReader("default.jpeg"));
  26. BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file\\default.jpeg"));
  27. // *3.目的 Socket 将读取的文件 发送到 服务器端
  28. // 注意:当发送完数据后,给服务器端发送一个结束标记,告诉服务器以及上传完
  29. //PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
  30. BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());

  31. /*String data = null;
  32. while ((data = br.readLine()) != null) {
  33. // System.out.println(data);
  34. pw.println(data);
  35. }*/
  36. //读取数据
  37. byte[] buf = new byte[1024];
  38. int len = -1;
  39. while((len = bis.read(buf))!=-1){
  40. bos.write(buf, 0, buf.length);
  41. }
  42. // public void shutdownOutput()禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送
  43. // ,并且后跟 TCP 的正常连接终止序列。

  44. s.shutdownOutput();// 此处是发送一个结束标志
  45. // *4.源 网络 读取服务器端发送过来的反馈信息
  46. BufferedReader brin = new BufferedReader(new InputStreamReader(
  47. s.getInputStream()));

  48. // *5.目的 显示屏 将反馈信息显示
  49. System.out.println(brin.readLine());
  50. // *6.关闭资源
  51. bis.close();
  52. s.close();

  53. }

  54. }
  55. <DIV class=blockcode>服务器端的代码  
  56. <BLOCKQUOTE>package TCP_UploadPicture;

  57. import java.io.BufferedInputStream;
  58. import java.io.BufferedOutputStream;
  59. import java.io.FileOutputStream;
  60. import java.io.IOException;
  61. import java.io.PrintWriter;
  62. import java.net.ServerSocket;
  63. import java.net.Socket;

  64. /*
  65. * TCP 上传文件 服务器端的思路
  66. * 1.创建ServerSocket服务器端对象,明确端口
  67. * 2.通过ServerSocket中的accept方法监听并获取客户端发过来的Socket对象
  68. * 3.源 Socket输入流 获取发送过来的数据
  69. * 4.目的 文件 将读取到的文件数据写到指定的位置
  70. *
  71. * 4.目的 Socket输出流 当上传完成后给客户端发送反馈信息
  72. * 5.关闭资源
  73. */
  74. public class Server {

  75. public static void main(String[] args) throws IOException {
  76. // * 1.创建ServerSocket服务器端对象,明确端口
  77. ServerSocket ss = new ServerSocket(10010);
  78. while(true){

  79. // * 2.通过ServerSocket中的accept方法监听并获取客户端发过来的Socket对象
  80. Socket s = ss.accept();

  81. // * 3.源 Socket输入流 获取发送过来的数据
  82. //BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  83. BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
  84. // * 4.目的 文件 将读取到的文件数据写到指定的位置
  85. //PrintWriter out = new PrintWriter(new FileWriter("图片.jpeg"), true);
  86. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("file\\11.jpeg"));
  87. // 读取数据
  88. /*String data = null;
  89. while ((data = brIn.readLine()) != null) {
  90. System.out.println(data);
  91. out.println(data);
  92. // bwOut.newLine();
  93. }*/
  94. byte[] buf = new byte[1024];
  95. int len = -1;
  96. while((len = bis.read(buf))!=-1){
  97. bos.write(buf, 0, buf.length);
  98. }

  99. // * 4.目的 Socket输出流 当上传完成后给客户端发送反馈信息
  100. PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
  101. pw.println("上传成功");
  102. // * 5.关闭资源
  103. s.close();
  104. }

  105. }

  106. }
复制代码


复制了 但是丢失了一部分数据


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马