使用基于TCP 的 Java Socket 通信技术模拟在线订票过程,具体要求如下: 1)定义Ticket 类,使用成员变量 id 对Ticket 类的对象进行唯一标识 2)生成100张Ticket 的实例并存储到容器中, 要求该容器只能存储Ticket类型,而且从该容器中取出时的顺序和存储时的顺序一致(提示:类似于队列) 3)在客户端创建相应的线程模拟购票请求,服务器端收到请求后启动相应的线程进行处理并返回购票的结果。如果有票返回相应的Ticket的id,如果无票返回0(要求使用数据流进行 通信)。 (20分)
时间: 2024-03-24 12:37:33 浏览: 17
好的,这是一个基于TCP的Java Socket通信的模拟在线订票过程的题目,具体要求如下:
1. 首先定义一个Ticket类,其中包含一个成员变量id,用于唯一标识每一个Ticket对象。
```java
public class Ticket {
private int id;
public Ticket(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
```
2. 在主函数中生成100张Ticket的实例并存储到容器中,要求该容器只能存储Ticket类型,而且从该容器中取出时的顺序和存储时的顺序一致(类似于队列)。
```java
public static void main(String[] args) {
List<Ticket> tickets = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
Ticket ticket = new Ticket(i);
tickets.add(ticket);
}
}
```
3. 在客户端创建相应的线程模拟购票请求,服务器端收到请求后启动相应的线程进行处理并返回购票的结果。如果有票返回相应的Ticket的id,如果无票返回0(要求使用数据流进行通信)。
客户端代码如下:
```java
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
for (int i = 1; i <= 100; i++) {
dos.writeUTF("BuyTicket");
int id = dis.readInt();
if (id != 0) {
System.out.println("Buy ticket " + id + " successfully");
} else {
System.out.println("All tickets are sold out");
}
}
dos.writeUTF("Exit");
dis.close();
dos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
服务器端代码如下:
```java
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
List<Ticket> tickets = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
Ticket ticket = new Ticket(i);
tickets.add(ticket);
}
while (true) {
Socket socket = serverSocket.accept();
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
String command = dis.readUTF();
if (command.equals("BuyTicket")) {
synchronized (tickets) {
if (!tickets.isEmpty()) {
Ticket ticket = tickets.remove(0);
dos.writeInt(ticket.getId());
} else {
dos.writeInt(0);
}
}
} else if (command.equals("Exit")) {
break;
}
dis.close();
dos.close();
socket.close();
}
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
以上就是使用基于TCP的Java Socket通信技术模拟在线订票过程的代码实现,希望能够帮到你。