java使用Socket编程,模拟用户登录,预设用户数据,提示登录成功或不成功的原因
时间: 2024-03-24 19:36:31 浏览: 48
用java实现用户登录
以下是一个 Java 使用 Socket 编程,模拟用户登录,预设用户数据,提示登录成功或不成功的原因的示例代码:
Server.java
```java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
// 预设用户数据
String username = "admin";
String password = "password123";
// 创建 ServerSocket 并监听端口
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
// 接收客户端连接
Socket socket = serverSocket.accept();
System.out.println("客户端 " + socket.getInetAddress() + " 已连接");
// 获取输入流和输出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 读取客户端发送的数据
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
String data = new String(buffer, 0, len);
// 校验用户名和密码
String[] userInfo = data.split(",");
if (userInfo.length != 2) {
// 客户端发送的数据格式错误
outputStream.write("ERROR".getBytes());
} else if (userInfo[0].equals(username) && userInfo[1].equals(password)) {
// 用户名和密码匹配
outputStream.write("SUCCESS".getBytes());
} else if (!userInfo[0].equals(username)) {
// 用户名不存在
outputStream.write("NO_USERNAME".getBytes());
} else {
// 密码错误
outputStream.write("WRONG_PASSWORD".getBytes());
}
// 关闭资源
inputStream.close();
outputStream.close();
socket.close();
serverSocket.close();
}
}
```
Client.java
```java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
// 获取用户输入
Scanner input = new Scanner(System.in);
System.out.print("请输入用户名:");
String username = input.nextLine();
System.out.print("请输入密码:");
String password = input.nextLine();
// 创建 Socket 并连接服务器
Socket socket = new Socket("127.0.0.1", 8888);
// 获取输入流和输出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 发送数据到服务器
String data = username + "," + password;
outputStream.write(data.getBytes());
// 读取服务器响应
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
String response = new String(buffer, 0, len);
// 处理服务器响应
if (response.equals("SUCCESS")) {
System.out.println("登录成功!");
} else if (response.equals("NO_USERNAME")) {
System.out.println("用户名不存在!");
} else if (response.equals("WRONG_PASSWORD")) {
System.out.println("密码错误!");
} else {
System.out.println("登录失败!");
}
// 关闭资源
inputStream.close();
outputStream.close();
socket.close();
}
}
```
在上述示例代码中,首先在服务器端预设了一个用户名和密码,然后通过 ServerSocket 类创建一个监听端口为 8888 的服务器。当客户端连接上服务器后,服务器会获取客户端发送的数据,校验用户名和密码,并返回相应的响应结果。
客户端会先通过 Socket 类连接服务器,然后将用户输入的用户名和密码发送到服务器,等待服务器响应。当客户端接收到服务器响应后,根据不同的响应结果提示登录成功或失败的原因。
需要注意的是,为了方便处理,这里的数据格式直接使用逗号分隔,实际应用中应该使用更合适的数据传输格式,例如 JSON 或 XML。
阅读全文