如何解决如何在UDP中实现循环缓冲区?
我不太确定如何对 UDP 数据包使用环形缓冲区。我有一个名为 enqueue() 的方法,它将数据添加到缓冲区,但 socket.receive() 应该将数据添加到缓冲区。那么,当我们从客户端接收数据包时,如何才能使用 enqueue 而不是 socket.receive() 呢?或者不应该这样使用?
我的环形缓冲区类:
private static int front,rear;
private int[] nums;
public RingBuffer(int initialSize) {
this.front = this.rear = -1;
this.nums = new int[initialSize];
}
public void enqueue(int data) {
if(isFull()) {
resize();
} else if(isEmpty()) {
front++;
}
rear = (rear+1) % nums.length;
nums[rear] = data;
}
public int dequeue() {
if(isEmpty()) {
throw new NoSuchElementException();
}
int temp = nums[front];
if(front == rear) {
front = rear = -1;
} else {
front = (front + 1) % nums.length;
}
return temp;
}
private void resize() {
int[] tempArr = new int[nums.length * 2];
int i = 0;
int j = front;
do {
tempArr[i++] = nums[j];
j = (j + 1) % nums.length;
}while(j != front);
front = 0;
rear = nums.length - 1;
nums = tempArr;
}
private int peek() {
if(isEmpty()) {
throw new NoSuchElementException();
}
return nums[front];
}
private boolean isEmpty() {
return front == -1;
}
private boolean isFull() {
return (rear + 1) % nums.length == front;
}
服务器:
public Server() throws IOException {
datagramSocket = new DatagramSocket(9022);
byte[] receiveData = new byte[10];
DatagramPacket packet = new DatagramPacket(receiveData,receiveData.length);
while(true) {
datagramSocket.receive(packet);
InetAddress inetAddress = packet.getAddress();
int clientPort = packet.getPort();
String messageReceived = new String(receiveData,0);
DatagramPacket datagramPacket = new DatagramPacket(messageReceived.getBytes(),messageReceived.getBytes().length,inetAddress,clientPort);
datagramSocket.send(datagramPacket);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。