4. 使用TCP网络程序上传图片:编写服务器类PicUploadServer,该类包含一个Socket类型的私有属性,并提供了该属性的有参构造方法。PicUploadServer类实现Runnable接口,重写run()方法,在run()方法内读取客户端上传的图片,并将图片存入服务器指定文件夹中。编写客户端类PicUpLoadClient,该类实现了读取指定图片,向指定端口发送图片数据的功能。 编写测试类Example03,在main()方法中,通过指定的端口号创建ServerSocket对象,并编写死循环,在死循环中,通过ServerSocket对象获取Socket对象,并开启线程服务。
时间: 2023-12-14 09:38:58 浏览: 27
以下是PicUploadServer类的代码实现:
```java
import java.io.*;
import java.net.*;
public class PicUploadServer implements Runnable {
private Socket socket;
public PicUploadServer(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
InputStream in = socket.getInputStream();
OutputStream out = new FileOutputStream("D:/pic.jpg");
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
System.out.println("图片上传成功!");
out.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
以下是PicUpLoadClient类的代码实现:
```java
import java.io.*;
import java.net.*;
public class PicUpLoadClient {
public static void main(String[] args) {
try {
File file = new File("D:/test.jpg");
FileInputStream in = new FileInputStream(file);
Socket socket = new Socket("localhost", 9999);
OutputStream out = socket.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
System.out.println("图片上传成功!");
out.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
最后,以下是Example03类的代码实现:
```java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Example03 {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket socket = serverSocket.accept();
PicUploadServer server = new PicUploadServer(socket);
new Thread(server).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
我们通过Example03类的main()方法启动了一个服务器,监听9999端口。当客户端连接到该端口时,服务器会创建一个PicUploadServer对象,将Socket对象传递给该对象,并开启一个新的线程来处理客户端请求。客户端通过PicUpLoadClient类,将指定图片上传至服务器。服务器接收到客户端上传的图片后,将其存储在指定文件夹中。