Java小例子:通过Socket发送和接收文件 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-17
Java小例子:通过Socket发送和接收文件时间:2011-04-05这是一个简单的包含发送端和接收端的例子。发送端向接收端发送文件名和文件内容 ,接收端将收到的文件保存在磁盘上。接收端可以同时接收多个发送端传来的文件,但没 有处理文件同名的情况。 这个例子中设计了一个简单的协议。发送的内容是这样的: 文件名长度(4字节)—文件名—文件内容长度(4字节)—文件内容 。 接收端也按照这个结构进行解析。建议先看 Client 类,再看 Server 类。 01.import java.io.*; 02.import java.net.ServerSocket; 03.import java.net.Socket; 04. 05./** 06. * 简单的文件发送与接收示例 07. */ 08.public class FileTrasmission { 09. 10. //程序入口 11. public static void main(String[] args) throws Exception { 12. int port = 7788; 13. new Server(port, "c:\\save\\").start(); 14. new Client().sendFile("127.0.0.1", port, "c:\\迷失在康熙末年.txt"); 15. } 16.} 17. 18./** 19. * 接收端。可同时接收多个发送端发来的文件。但如果发来的文件是同名的话那就乱了。 20. */ 21.class Server { 22. 23. private int listenPort; 24. 25. private String savePath; 26. 27. /** 28. * 构造方法 29. * 30. * @param listenPort 侦听端口 31. * @param savePath 接收的文件要保存的路径 32. * 33. * @throws IOException 如果创建保存路径失败 34. */ 35. Server(int listenPort, String savePath) throws IOException { 36. this.listenPort = listenPort; 37. this.savePath = savePath; 38. 39. File file = new File(savePath); 40. if (!file.exists() && !file.mkdirs()) { 41. throw new IOException("无法创建文件夹 " + savePath); 42. } 43. } 44. 45. // 开始侦听 46. public void start() { 47. new ListenThread().start(); 48. } 49. 50. // 网上抄来的,将字节转成 int。b 长度不得小于 4,且只会取前 4 位。 51. public static int b2i(byte[] b) { 52. int value = 0; 53. for (int i = 0; i < 4; i++) { 54. int shift = (4 - 1 - i) * 8; 55. value += (b[i] & 0x000000FF) << shift; 56. } 57. return value; 58. } 59. 60. 61. /** 62. * 侦听线程 63. */ 64. private class ListenThread extends Thread { 65. 66. @Override 67. public void run() { 68. try { 69. ServerSocket server = new ServerSocket(listenPort); 70. 71. // 开始循环 72. while (true) { 73. Socket socket = server.accept(); 74. new HandleThread(socket).start(); 75. } 76. } catch (IOException e) { 77. e.printStackTrace(); 78. } 79. } 80. } 81. 82. /** 83. * 读取流并保存文件的线程 84. */ 85. private class HandleThread extends Thread { 86. 87. private Socket socket; 88. 89. private HandleThread(Socket socket) { 90. this.socket = socket; 91. } 92. 93. @Override 94. public void run() { 95. try { 96. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Java小例子:通过Socket发送和接收文件 - 编程入门网的所有评论