Java Socket编程 文件传输(客户端从服务器下载一个文件)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用于客户端从服务器端下载文件
服务器(Server)
[java]view plain copy
1.package com.socket.sample;
2.
3.import java.io.BufferedInputStream;
4.import java.io.DataInputStream;
5.import java.io.DataOutputStream;
6.import java.io.File;
7.import java.io.FileInputStream;
8.import .ServerSocket;
9.import .Socket;
10.
11.public class ServerTest {
12.int port = 8821;
13.
14.void start() {
15. Socket s = null;
16.try {
17. ServerSocket ss = new ServerSocket(port);
18.while (true) {
19.// 选择进行传输的文件
20. String filePath = "D:\\lib.rar";
21. File fi = new File(filePath);
22.
23. System.out.println("文件长度:" + (int) fi.length());
24.
25.// public Socket accept() throws
26.// IOException侦听并接受到此套接字的连接。此方法在进行连接之前一
直阻塞。
27.
28. s = ss.accept();
29. System.out.println("建立socket链接");
30. DataInputStream dis = new DataInputStream(
31.new BufferedInputStream(s.getInputStream()));
32. dis.readByte();
33.
34. DataInputStream fis = new DataInputStream(
35.new BufferedInputStream(new FileInputStream(filePath
)));
36. DataOutputStream ps = new DataOutputStream(s.getOutputStream
());
37.// 将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处
理,还需要加工,具体可以参见Think In Java
38.// 4th里有现成的代码。
39. ps.writeUTF(fi.getName());
40. ps.flush();
41. ps.writeLong((long) fi.length());
42. ps.flush();
43.
44.int bufferSize = 8192;
45.byte[] buf = new byte[bufferSize];
46.
47.while (true) {
48.int read = 0;
49.if (fis != null) {
50. read = fis.read(buf);
51.// 从包含的输入流中读取一定数量的字节,并将它们存储到缓冲
区数组 b
52.// 中。以整数形式返回实际读取的字节数。在输入数据可用、检
测到文件末尾 (end of file)
53.// 或抛出异常之前,此方法将一直阻塞。
54. }
55.
56.if (read == -1) {
57.break;
58. }
59. ps.write(buf, 0, read);
60. }
61. ps.flush();
62.// 注意关闭socket链接哦,不然客户端会等待server的数据过来,
63.// 直到socket超时,导致数据不完整。
64. fis.close();
65. s.close();
66. System.out.println("文件传输完成");
67. }
68.
69. } catch (Exception e) {
70. e.printStackTrace();
71. }
72. }
73.
74.public static void main(String arg[]) {
75.new ServerTest().start();
76. }
77.}
客户端工具(SocketTool)
[java]view plain copy
1.package com.socket.sample;
2.
3.import java.io.BufferedInputStream;
4.import java.io.DataInputStream;
5.import java.io.DataOutputStream;
6.import .Socket;
7.
8.public class ClientSocket {
9.private String ip;
10.
11.private int port;
12.
13.private Socket socket = null;
14.
15. DataOutputStream out = null;
16.
17. DataInputStream getMessageStream = null;
18.
19.public ClientSocket(String ip, int port) {
20.this.ip = ip;
21.this.port = port;
22. }
23.
24./** */
25./**
26. * 创建socket连接
27. *
28. * @throws Exception
29. * exception
30. */
31.public void CreateConnection() throws Exception {
32.try {
33. socket = new Socket(ip, port);
34. } catch (Exception e) {
35. e.printStackTrace();
36.if (socket != null)
37. socket.close();
38.throw e;