解释一下代码每一句的含义:package 文件传送器;import javaioDataOutputStream;import javaioFile;import javaioFileInputStream;import javanetSocket;import javaxswingJFileChooser;import javaxswingJFrame;import javaxswingJOpt
这是一个Java代码,用于实现文件传输的客户端。下面是每一句代码的含义:
-
package 文件传送器; 定义了一个名为“文件传送器”的包。
-
import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.Socket; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; 引入需要使用的类。
-
public class FileTransferClient extends Socket { 定义一个名为“FileTransferClient”的类,该类继承自Socket类。
-
private static final String SERVER_IP = "10.41.104.30"; 定义名为“SERVER_IP”的字符串变量,用于存储服务端IP地址。
-
private static final int SERVER_PORT = 8899; 定义名为“SERVER_PORT”的整型常量,用于存储服务端端口号。
-
private Socket client; 定义名为“client”的Socket类型变量。
-
private FileInputStream fis; 定义名为“fis”的FileInputStream类型变量。
-
private DataOutputStream dos; 定义名为“dos”的DataOutputStream类型变量。
-
public FileTransferClient() throws Exception { 构造函数,用于连接服务端。
-
super(SERVER_IP, SERVER_PORT); 调用父类Socket的构造函数,连接服务端。
-
this.client = this; 将this赋值给client。
-
System.out.println("Cliect[port:" + client.getLocalPort() + "] 成功连接服务端"); 输出连接成功的提示信息。
-
public void sendFile() throws Exception { 定义名为“sendFile”的方法,用于传输文件。
-
JFileChooser fc = new JFileChooser(); 创建一个JFileChooser实例。
-
int returnVal = fc.showOpenDialog(new JFrame()); 显示文件选择对话框。
-
if (returnVal == JFileChooser.APPROVE_OPTION) { 如果用户选择了文件,执行下面的代码。
-
File file = fc.getSelectedFile(); 获取用户选择的文件。
-
try { 尝试执行以下代码。
-
fis = new FileInputStream(file); 创建一个FileInputStream实例,用于读取文件内容。
-
dos = new DataOutputStream(client.getOutputStream()); 创建一个DataOutputStream实例,用于向服务端发送数据。
-
dos.writeUTF(file.getName()); 向服务端发送文件名。
-
dos.flush(); 刷新缓冲区,将数据发送到服务端。
-
dos.writeLong(file.length()); 向服务端发送文件长度。
-
dos.flush(); 刷新缓冲区,将数据发送到服务端。
-
byte[] bytes = new byte[1024]; 创建一个长度为1024的字节数组。
-
int length = 0; 定义一个名为“length”的整型变量,用于存储每次读取的字节数。
-
long progress = 0; 定义一个名为“progress”的长整型变量,用于存储传输进度。
-
while ((length = fis.read(bytes, 0, bytes.length)) != -1) { dos.write(bytes, 0, length); dos.flush(); progress += length; System.out.print("| " + (100 * progress / file.length()) + "% |"); } 读取文件内容,并将其发送到服务端。同时,输出传输进度。
-
JOptionPane.showMessageDialog(new JFrame(), "文件上传成功!"); 显示文件上传成功的提示信息。
-
} catch (Exception e) { 如果出现异常,执行下面的代码。
-
e.printStackTrace(); 输出异常信息。
-
JOptionPane.showMessageDialog(new JFrame(), "文件上传失败!"); 显示文件上传失败的提示信息。
-
} finally { 不管是否出现异常,都要执行下面的代码。
-
if (fis != null) fis.close(); 如果fis不为null,关闭它。
-
if (dos != null) dos.close(); 如果dos不为null,关闭它。
-
client.close(); 关闭客户端连接。
-
} 结束try-catch-finally块。
-
} 结束sendFile方法。
-
public static void main(String[] args) { 主函数。
-
try { FileTransferClient client = new FileTransferClient(); 创建一个FileTransferClient实例,用于连接服务端。
-
client.sendFile(); 传输文件。
-
} catch (Exception e) { 如果出现异常,执行下面的代码。
-
e.printStackTrace(); 输出异常信息。
-
JOptionPane.showMessageDialog(new JFrame(), "连接服务器失败!"); 显示连接服务器失败的提示信息。
-
} 结束try-catch块。
-
} 结束main方法
原文地址: http://www.cveoy.top/t/topic/flWl 著作权归作者所有。请勿转载和采集!