要使用Java Socket套接字发送文件,您需要创建一个客户端和一个服务器端
步骤1:创建服务器端
首先,创建一个名为FileServer.java的文件,并编写以下代码:
import java.io.*;
import java.net.*;
public class FileServer {
public static void main(String[] args) {
int port = 9999; // 设置监听端口
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("等待客户端连接...");
Socket socket = serverSocket.accept();
System.out.println("客户端已连接");
InputStream inputStream = socket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
String fileName = dataInputStream.readUTF(); // 读取文件名
long fileSize = dataInputStream.readLong(); // 读取文件大小
System.out.println("接收文件: " + fileName + ", 大小: " + fileSize);
FileOutputStream fileOutputStream = new FileOutputStream(fileName);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
byte[] buffer = new byte[4096];
int bytesRead;
long totalBytesRead = 0;
while (totalBytesRead < fileSize && (bytesRead = dataInputStream.read(buffer, 0, (int) Math.min(buffer.length, fileSize - totalBytesRead))) != -1) {
bufferedOutputStream.write(buffer, 0, bytesRead);
totalBytesRead += bytesRead;
}
bufferedOutputStream.close();
fileOutputStream.close();
System.out.println("文件接收完成");
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
步骤2:创建客户端
接下来,创建一个名为FileClient.java的文件,并编写以下代码:
import java.io.*;
import java.net.*;
public class FileClient {
public static void main(String[] args) {
String serverAddress = "localhost"; // 服务器地址
int serverPort = 9999; // 服务器端口
String filePath = "example.txt"; // 要发送的文件路径
try (Socket socket = new Socket(serverAddress, serverPort)) {
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
File file = new File(filePath);
String fileName = file.getName();
long fileSize = file.length();
dataOutputStream.writeUTF(fileName); // 发送文件名
dataOutputStream.writeLong(fileSize); // 发送文件大小
FileInputStream fileInputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
dataOutputStream.write(buffer, 0, bytesRead);
}
bufferedInputStream.close();
fileInputStream.close();
System.out.println("文件发送完成");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
步骤3:运行程序
首先运行FileServer.java,然后运行FileClient.java。确保在运行客户端之前,服务器端已经在监听端口上运行。
这将使客户端将名为example.txt的文件发送到服务器端。服务器端将接收文件并将其保存在当前目录下。
注意:这个示例仅适用于发送较小的文件。对于大型文件,您可能需要考虑使用更高级的技术,如分块传输和进度报告。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。