服务器端:
package com.it.demo4;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务器端程序
*/
public class Server3 {
public static void main(String[] args) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8888);
System.out.println("服务器172.171.2.68启动啦,监听的端口是:8888");
while (true) {
Socket socket = serverSocket.accept();
//让子线程处理请求
T t = new T(socket);
t.start();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
class T extends Thread {
Socket socket;
public T(Socket socket) {
String ip = socket.getInetAddress().getHostAddress();
System.out.println("客户端访问服务器:" + ip);
this.socket = socket;
}
/**
* 处理客户端的请求
*/
@Override
public void run() {
try {
InputStream inputStream = socket.getInputStream();
//写出给客户端输出流
OutputStream outputStream = socket.getOutputStream();
byte[] bytes = new byte[1024];//1kb
int len = inputStream.read(bytes);
//用户请求
String s = new String(bytes, 0, len);
String path = "";
//判断的请求类型
if (s.contains("1")) {
//响应给客户端一张美女图片
path = "D:/2022/1.jpeg";
} else if (s.contains("2")) {
//响应给客户端一张美女视频
path = "D:/2022/2.wmv";
} else {
//美女电子书
path = "D:/2022/3.doc";
}
File file = new File(path);
//从服务器硬盘上读取
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
byte[] buf = new byte[1024];
int l = bis.read(buf);
while (l != -1) {
outputStream.write(buf, 0, l);
l = bis.read(buf);
}
outputStream.flush();
socket.shutdownOutput();
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
}
客户端:
package com.it.demo1;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Client3 {
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(System.in);
Socket socket = new Socket("172.171.2.68", 8888);
System.out.print("请输入要下载的资源: 1.图片 2.视频 3.文档");
String type = input.next();
String path = "";
if ("1".equals(type)) {
path = "D:/2023/1.jpeg";
} else if ("2".equals(type)) {
path = "D:/2023/2.wmv";
} else {
path = "D:/2023/3.doc";
}
OutputStream outputStream = socket.getOutputStream();
outputStream.write(type.getBytes());
outputStream.flush();
socket.shutdownOutput();
System.out.println("下载请求发出啦....正在下载服务器资源...");
InputStream inputStream = socket.getInputStream();
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
while (len != -1) {
bos.write(buffer, 0, len);
len = inputStream.read(buffer);
}
bos.close();
inputStream.close();
outputStream.close();
socket.close();
System.out.println("文件下载成功....");
}
}
通过网络编程现一个简单的文件下载案例