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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 古银平 中级黑马   /  2012-10-31 23:07  /  2004 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 古银平 于 2012-11-5 11:57 编辑
  1. import java.net.*;
  2. import java.io.*;
  3. class PicClient {
  4. public static void main(String[] args)
  5. {
  6. Socket s = null;
  7. try {
  8. s = new Socket("192.168.1.101",10001);
  9. } catch (UnknownHostException e) {
  10. // TODO Auto-generated catch block
  11. e.printStackTrace();
  12. } catch (IOException e) {
  13. // TODO Auto-generated catch block
  14. e.printStackTrace();
  15. }
  16. BufferedInputStream bis = null;
  17. BufferedOutputStream bosOut = null;
  18. BufferedReader brIn = null;
  19. try {
  20. bosOut = new BufferedOutputStream(s.getOutputStream());
  21. brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  22. } catch (IOException e1) {
  23. // TODO Auto-generated catch block
  24. e1.printStackTrace();
  25. }
  26. try {
  27. bis = new BufferedInputStream(new FileInputStream("d:\\1.jpg"));
  28. } catch (FileNotFoundException e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. }

  32. try {
  33. int buf = 0;
  34. while ((buf = bis.read())!=-1)
  35. {
  36. bosOut.write(buf);
  37. }
  38. } catch (IOException e) {
  39. // TODO Auto-generated catch block
  40. e.printStackTrace();
  41. }
  42. try {
  43. s.shutdownOutput();
  44. } catch (IOException e) {
  45. // TODO Auto-generated catch block
  46. e.printStackTrace();
  47. }
  48. try {
  49. String str = brIn.readLine();
  50. System.out.println("Server"+str);
  51. } catch (IOException e) {
  52. // TODO Auto-generated catch block
  53. e.printStackTrace();
  54. }
  55. finally
  56. {
  57. try {
  58. bis.close();
  59. s.close();
  60. } catch (IOException e) {
  61. // TODO Auto-generated catch block
  62. e.printStackTrace();
  63. }
  64. }
  65. }

  66. <DIV class=blockcode>
  67. <BLOCKQUOTE>import java.net.*;
  68. import java.io.*;
  69. class picServer {
  70. public static void main(String[] args)
  71. {
  72. ServerSocket ss = null;
  73. try {
  74. ss = new ServerSocket(10001);
  75. } catch (IOException e) {
  76. // TODO Auto-generated catch block
  77. e.printStackTrace();
  78. }
  79. Socket s = null;
  80. try {
  81. s = ss.accept();
  82. String ip = s.getInetAddress().getHostAddress();
  83. System.out.println(ip+"........connected");

  84. } catch (IOException e) {
  85. // TODO Auto-generated catch block
  86. e.printStackTrace();
  87. }
  88. BufferedInputStream bisIn = null;
  89. BufferedOutputStream bos = null;
  90. BufferedWriter bwOut = null;
  91. try {
  92. bisIn = new BufferedInputStream(s.getInputStream());
  93. bos = new BufferedOutputStream(new FileOutputStream("d:\\2.jpg"));
  94. bwOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  95. } catch (IOException e) {
  96. // TODO Auto-generated catch block
  97. e.printStackTrace();
  98. }

  99. try {
  100. int buf = 0;
  101. while((buf = bisIn.read())!=-1)
  102. {
  103. bos.write(buf);

  104. }
  105. bwOut.write("上传成功!");
  106. bwOut.newLine();
  107. bwOut.flush();
  108. } catch (IOException e) {
  109. // TODO Auto-generated catch block
  110. e.printStackTrace();
  111. }

  112. finally
  113. {
  114. try {
  115. bwOut.close();
  116. s.close();
  117. ss.close();
  118. } catch (IOException e) {
  119. // TODO Auto-generated catch block
  120. e.printStackTrace();
  121. }
  122. }





  123. }

  124. }
复制代码
}
结果为什么,图片变小了啊,

未命名.jpg (9.63 KB, 下载次数: 10)

未命名.jpg

2 个回复

倒序浏览
名字不一样也有能导致大小不一样,试试储存时名字一样,看大小是不是一样大。
回复 使用道具 举报

字符流内部封装了数组,先读取两个字节查码表后刷新。
而字节流因为本身就是字节所以不用刷新,但你用的是字节流缓冲区,而在服务端读取客户端发送的数据时,客户端的流并没有关闭,所以要用到flush()方法。
故37行后面加一句bosOut.flush();就OK了。
至于服务端可加可不加,因为最后服务端关闭了流。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

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