Java Socket编程 文件传输(客户端从服务器下载一个文件)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档