快速业务通道

Java小例子:通过Socket发送和接收文件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
InputStream is = socket.getInputStream(); 97. readAndSave(is); 98. } catch (IOException e) { 99. e.printStackTrace(); 100. } finally { 101. try { 102. socket.close(); 103. } catch (IOException e) { 104. // nothing to do 105. } 106. } 107. } 108. 109. // 从流中读取内容并保存 110. private void readAndSave(InputStream is) throws IOException { 111. String filename = getFileName(is); 112. int file_len = readInteger(is); 113. System.out.println("接收文件:" + filename + ",长度:" + file_len); 114. 115. readAndSave0(is, savePath + filename, file_len); 116. 117. System.out.println("文件保存成功(" + file_len + "字节)。"); 118. } 119. 120. private void readAndSave0(InputStream is, String path, int file_len) throws IOException { 121. FileOutputStream os = getFileOS(path); 122. readAndWrite(is, os, file_len); 123. os.close(); 124. } 125. 126. // 边读边写,直到读取 size 个字节 127. private void readAndWrite(InputStream is, FileOutputStream os, int size) throws IOException { 128. byte[] buffer = new byte[4096]; 129. int count = 0; 130. while (count < size) { 131. int n = is.read(buffer); 132. // 这里没有考虑 n = -1 的情况 133. os.write(buffer, 0, n); 134. count += n; 135. } 136. } 137. 138. // 读取文件名 139. private String getFileName(InputStream is) throws IOException { 140. int name_len = readInteger(is); 141. byte[] result = new byte[name_len]; 142. is.read(result); 143. return new String(result); 144. } 145. 146. // 读取一个数字 147. private int readInteger(InputStream is) throws IOException { 148. byte[] bytes = new byte[4]; 149. is.read(bytes); 150. return b2i(bytes); 151. } 152. 153. // 创建文件并返回输出流 154. private FileOutputStream getFileOS(String path) throws IOException { 155. File file = new File(path); 156. if (!file.exists()) { 157. file.createNewFile(); 158. } 159. 160. return new FileOutputStream(file); 161. } 162. } 163.} 164. 165./** 166. * 发送端 167. */ 168.class Client { 169. 170. // 网上抄来的,将 int 转成字节 171. public static byte[] i2b(int i) { 172. return new byte[]{ 173. (byte) ((i >> 24) & 0xFF), 174. (byte) ((i >> 16) & 0xFF), 175. (byte) ((i >> 8) & 0xFF), 176. (byte) (i & 0xFF) 177. }; 178. } 179. 180. /** 181. * 发送文件。文件大小不能大于 {@link Integer#MAX_V

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号