请用java实现以上功能中的客户端
时间: 2023-09-02 10:06:26 浏览: 39
好的,以下是一个简单的基于Java Socket通信的客户端实现,可以发送消息给服务器并接收服务器回复的消息,也可以发送文件给服务器:
```java
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class ECommerceClient {
private static final String SERVER_IP = "127.0.0.1"; // 服务器IP
private static final int SERVER_PORT = 8888; // 服务器端口号
private Socket socket; // Socket对象
private BufferedReader reader; // 读取服务器响应的BufferedReader
private BufferedWriter writer; // 发送消息给服务器的BufferedWriter
private Scanner scanner; // 从控制台读取用户输入的Scanner
public ECommerceClient() {
try {
// 连接服务器
socket = new Socket(SERVER_IP, SERVER_PORT);
// 获取输入输出流
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 获取控制台输入
scanner = new Scanner(System.in);
// 启动消息接收线程
new Thread(new MessageReceiver()).start();
// 发送欢迎消息给服务器
writer.write("Hello server!\n");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendMessage(String message) {
try {
// 发送消息给服务器
writer.write(message + "\n");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendFile(File file) {
try {
// 发送文件给服务器
FileInputStream fileInputStream = new FileInputStream(file);
OutputStream outputStream = socket.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
fileInputStream.close();
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ECommerceClient client = new ECommerceClient();
while (true) {
String message = client.scanner.nextLine();
if (message.equals("quit")) {
break;
} else if (message.startsWith("send ")) {
String[] parts = message.split(" ");
File file = new File(parts[1]);
if (file.exists() && file.isFile()) {
client.sendFile(file);
} else {
System.out.println("File not found: " + parts[1]);
}
} else {
client.sendMessage(message);
}
}
try {
// 关闭连接
client.socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private class MessageReceiver implements Runnable {
@Override
public void run() {
try {
while (true) {
// 读取服务器响应
String message = reader.readLine();
if (message == null) {
break;
}
System.out.println("Server: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
上面的代码实现了一个基本的客户端,可以发送消息给服务器并接收服务器回复的消息。如果用户输入的是以“send ”开头的命令,客户端会将指定的文件发送给服务器。当客户端接收到消息时,会在控制台打印出来。如果用户输入“quit”命令,客户端会退出。