Tôi đã xóa liên kết mạng không có kết quả. Chúng tôi đang đối mặt với một vấn đề mà một số thiết bị Android bị mất gói dữ liệu nghiêm trọng. Để cung cấp một số nền, ứng dụng kết nối với một Wifi cụ thể và tìm kiếm các gói UDP được phát sóng trên cổng 17216. Các gói này có kích thước 832 byte, không bao gồm các tiêu đề được bao bọc và được gửi với tốc độ bình thường là bốn giây.Mất gói UDP nghiêm trọng trên một số thiết bị Android
Chúng tôi chỉ gặp sự cố trên hai thiết bị, máy tính bảng Turbox Rubik II cấp thấp và ASUS Memo Pad HD 7. Các thiết bị khác mà chúng tôi đã thử nghiệm (điện thoại và máy tính bảng) đều thu thập các gói theo quy định thường xuyên khoảng thời gian.
Chức năng tiếp nhận các gói tin là thế này:
public void run()
{
while (isUDPServerRunning)
{
try
{
socket.receive(packet);
ProcessRawPacketData();
DisplayLoggingInfo();
}
catch (IOException e)
{
Log.e("receive", e.getMessage());
e.printStackTrace();
}
}
}
Và đó là một phần của một Runnable
. Các ổ cắm được tạo ra như sau:
byte[] buffer = new byte[1024];
DatagramSocket socket;
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
với các ổ cắm được khởi tạo trong phương pháp onCreate()
gia hạn Service
của chúng tôi:
socket = new DatagramSocket(SERVERPORT);
các gói tin đang được nhận bởi module Wifi. Chúng tôi đã xác nhận rằng bằng cách rooting một trong các thiết bị và cài đặt một gói sniffer, do đó, vấn đề bằng cách nào đó phải được mã liên quan.
Trên các gói thiết bị bị ảnh hưởng được nhận một cách chính xác trong vài giây và sau đó có hoàn toàn bỏ học kéo dài trong vài giây, vì vậy tôi ước tính mất hơn 50%.
Mọi trợ giúp sẽ được đánh giá cao. Chúng tôi đang kéo tóc ra.
Cập nhật Tôi đã nhầm lẫn về gói sniffer. Dường như gói sniffer cũng mất một số gói tin có liên quan trên thiết bị gốc. Đôi khi,, mặc dù, chỉ cần bắt đầu gói tin sniffer khắc phục vấn đề! Bật/tắt Bluetooth như được đề xuất bên dưới dường như không tạo nên sự khác biệt. Đây có phải là vấn đề phần cứng khác không?
Cập nhật 2 Dưới đây là một ví dụ về các bản ghi Tôi in ngay sau khi dòng socket.receive()
. Chú ý cách nó bỏ qua các gói trị giá nửa phút và sau đó hoạt động tốt trong vài giây.
05-25 15:44:38.670: D/LOG(4393): Packet Received
05-25 15:44:38.941: D/LOG(4393): Packet Received
05-25 15:45:09.482: D/LOG(4393): Packet Received
05-25 15:45:09.716: D/LOG(4393): Packet Received
05-25 15:45:09.928: D/LOG(4393): Packet Received
05-25 15:45:10.184: D/LOG(4393): Packet Received
05-25 15:45:10.451: D/LOG(4393): Packet Received
05-25 15:45:10.661: D/LOG(4393): Packet Received
bạn đã thử sử dụng các công cụ kiểm tra băng thông hoặc chẩn đoán giao diện mạng trên các thiết bị đó chưa? –
Treo trong đó. Đọc phần này để lấy cảm hứng: http://blog.krisk.org/2013/02/packets-of-death.html – CenterOrbit