问题描述
我不太确定如何对 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 (将#修改为@)