30/09/2018, 17:35
Socket java, error nhận file
các anh cho hỏi, tai sao em send file ở server nhận thì ok, nhưng client nhận về k đủ byte của file, tại sao vậy, cách fix như thế nào vậy mọi người
server
http://codepad.org/kBZR9GLV
client
http://codepad.org/hTJKs5KQ
//luu ý : test tren java trên máy tính thì ok, nhưng test truyền đi cho di động thì error
Bài liên quan
Code nhiều quá, khó phân tích. Hoặc là @tungnhuxua copy đoạn code làm công việc gửi/nhận dữ liệu hoặc là @tungnhuxua tự kiểm tra lại chỗ gửi nhận dữ liệu.
Lý do thông thường cùa việc này là do khi gửi trong cùng một máy thì tốc độ đọc và ghi cao. Nếu gửi gói nhỏ dữ liệu thì may mắn là toàn bộ dữ liệu gửi qua kịp.
Nhưng khi gửi qua mạng, không nhất thiết phải là di động, thì việc gửi và nhận không kịp. Dẫn đến bị mất dữ liệu. Kiểm tra lại hàm gửi nhận bằng socket.
dạ anh Đạt
server:
http://codepad.org/WQYX1RtZ
client :
http://codepad.org/WoG84QYh
đúng anh ah, gửi file thì có lúc ksao, có lúc đứng nguyên màn hình điên thoại
Em phải chờ cho tới khi toàn bộ dữ liệu đã gửi qua tới client. Khi đó mới close connection.
Kiểm tra cái biến
numByte
. Ở đây em while thế này thì chỉ mới 1 bytes thôi nó đã close connection rồi. Do1 > 0
màCách của socket hoạt động thế này. Ở phía đầu server sẽ tạo ra một cái file, ở phía client cũng sẽ tạo ra một cái file.
Hai cái file này thông nhau, người ta có thể gọi là pipe, gọi là cái ống. Đầu này ghi thì đầu kia nhận. Dữ liệu chạy qua giống như dẫn nước qua ống vậy.
Đầu gửi gửi 100 bytes thì đầu nhận cũng phải chờ cho tới khi nhận được 100 bytes mới ngừng. Đôi khi em may mắn, dữ liệu nhỏ và mạng tốt, thì mới có thể gửi được toàn bộ nội dung mà không cần chờ.
Sửa lại đoạn code ở trên thành chờ để đọc byte và nối vào dữ liệu có sẵn.
phần server gửi về client có gì sai không anh
http://codepad.org/NXEl8NuT
Quan tâm phía nhận trước, phía gửi trước mắt không có vấn đề gì đâu.
em sửa lại, nhưng sao vẫn bị lỗi vậy anh, file ảnh có 600k mà nhận đc 500k a ah
client : http://codepad.org/KEOuZeVX