使用基于TCP 的 Java Socket 通信技术模拟在线订票过程,具体要求如下: 1)定义Ticket 类,使用成员变量 id 对Ticket 类的对象进行唯一标识 2)生成100张Ticket 的实例并存储到容器中, 要求该容器只能存储Ticket类型,而且从该容器中取出时的顺序和存储时的顺序一致(提示:类似于队列) 3)在客户端创建相应的线程模拟购票请求,服务器端收到请求后启动相应的线程进行处理并返回购票的结果。如果有票返回相应的Ticket的id,如果无票返回0(要求使用数据流进行 通信)。 (20分)
时间: 2024-03-24 12:37:37 浏览: 52
好的,这是一个基于TCP的Java Socket通信技术模拟在线订票过程的问题,我会尽力回答。首先,我们需要定义Ticket类,代码如下:
```java
public class Ticket {
private int id;
public Ticket(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
```
然后,我们需要生成100张Ticket的实例并存储到容器中,要求该容器只能存储Ticket类型,而且从该容器中取出时的顺序和存储时的顺序一致,代码如下:
```java
List<Ticket> ticketList = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
Ticket ticket = new Ticket(i);
ticketList.add(ticket);
}
```
接下来,我们需要在客户端创建相应的线程模拟购票请求,服务器端收到请求后启动相应的线程进行处理并返回购票的结果。如果有票返回相应的Ticket的id,如果无票返回0。要求使用数据流进行通信。客户端和服务器端的代码如下:
客户端:
```java
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream dis = new DataInputStream(socket.getInputStream());
for (int i = 1; i <= 110; i++) {
dos.writeInt(i);
int result = dis.readInt();
if (result == 0) {
System.out.println("第" + i + "次购票失败!");
} else {
System.out.println("第" + i + "次购票成功,购买的票号为:" + result);
}
}
dos.close();
dis.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> ticketList = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
Ticket ticket = new Ticket(i);
ticketList.add(ticket);
}
while (true) {
Socket socket = serverSocket.accept();
new Thread(() -> {
try {
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
int ticketId = dis.readInt();
synchronized (ticketList) {
if (ticketList.size() > 0) {
Ticket ticket = ticketList.remove(0);
dos.writeInt(ticket.getId());
} else {
dos.writeInt(0);
}
}
dis.close();
dos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
以上就是使用基于TCP的Java Socket通信技术模拟在线订票过程的解答,希望对你有帮助。
阅读全文