本文共 3107 字,大约阅读时间需要 10 分钟。
package com.tencent.network;import java.io.*;import java.net.InetAddress;import java.net.Socket;public class FileClient { public static void main(String[] args) { try { // 创建socket连接 Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000); // 获取输出流 OutputStream os = socket.getOutputStream(); // 获取文件输入流 FileInputStream fs = new FileInputStream(new File("./file.out")); // 定义缓冲区 byte[] buffer = new byte[1024]; int len = 0; // 发送文件 while ((len = fs.read(buffer)) != -1) { os.write(buffer, 0, len); } // 通知服务器传输完成 socket.shutdownOutput(); // 接收服务器回复 InputStream is = socket.getInputStream(); ByteArrayOutputStream bo = new ByteArrayOutputStream(); byte[] buffer2 = new byte[1024]; int len2 = 0; while ((len2 = is.read(buffer2)) != -1) { bo.write(buffer2, 0, len2); } // 输出服务器回复内容 System.out.println(bo.toString()); // 关闭资源 fs.close(); os.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } }} package com.tencent.network;import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class FileServer { public static void main(String[] args) { try { // 创建服务器socket ServerSocket serverSocket = new ServerSocket(9000); // 等待客户端连接 Socket socket = serverSocket.accept(); // 获取输入流 InputStream is = socket.getInputStream(); // 定义输出流 OutputStream os = socket.getOutputStream(); // 获取文件输入流 FileOutputStream fos = new FileOutputStream(new File("new")); // 接收文件 byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { fos.write(buffer, 0, len); } // 启动服务器输出流 socket.getOutputStream().write("我接收完毕了,你可以断开了".getBytes()); // 关闭资源 fos.close(); is.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } }} 在上述代码中,客户端通过Java Socket库连接到服务器,使用InputStream和OutputStream完成文件传输。以下是传输过程的详细说明:
客户端
服务器端
上述代码实现了一个简单的文件传输协议,适用于内部网络传输场景。通过Socket库的双向通信机制,实现了高效的文件传输功能。客户端和服务器端分别负责文件的读取和写入,整个过程保持低耦合,易于扩展和维护。
转载地址:http://njpt.baihongyu.com/