Trong C Tôi đã có mã số làm việc nhưng không biết tại sao nó hoạt động, vì vậy tôi bắt đầu viết lại nó để tôi thực sự có thể hiểu những gì đang xảy ra.Làm thế nào để lưu trữ đầu ra của recv()?
Cho đến nay rất tốt! Tôi viết lại và chắc chắn 90% tôi hiểu mọi thứ đang diễn ra; vấn đề tuy nhiên, là tôi không có ý tưởng làm thế nào để lưu trữ các dữ liệu chunk nhận được recv
(databff
) vào bộ đệm được phân bổ trước của tôi (htmlbff
).
Xét đoạn mã sau (lưu ý rằng tôi lột này xuống khá một chút, vì vậy nó chỉ bao gồm những điều cơ bản, ví dụ như không có việc tái phân bổ bộ nhớ hoặc rò rỉ bảo vệ, vv ...):
#define BUFFERSIZE 4096
#define MAXDATASIZE 256
char *htmlbff, databff[MAXDATASIZE];
int c, i = BUFFERSIZE, q = 0;
if(!(htmlbff = malloc(i)))
{
printf("\nError! Memory allocation failed!");
return 0x00;
}
while((c = recv(sock, databff, MAXDATASIZE, 0)) > 0)
{
/*memory checks stripped out since they are irrelevent for this post*/
/*store data to the appropriate area in htmlbff*/
q += c;
}
Vì vậy (nếu c
là kích thước của đoạn dữ liệu hiện tại, và q
là tổng số dữ liệu nhận được cho đến nay (q
được tăng thêm c
mỗi lần lặp lại vòng lặp). Tại thời điểm này tôi đang sử dụng q
để xử lý bộ nhớ (trong trường hợp ai đó đang tự hỏi) nhưng tôi tin rằng nó cũng sẽ có mục đích trong giải pháp cho vấn đề này.
Ở bất kỳ mức nào, câu hỏi tôi hỏi là liên quan đến nhận xét thứ hai. Làm cách nào để lưu trữ dữ liệu từ recv thành htmlbff
chính xác?
Tôi thực sự thích câu trả lời này cảm ơn bạn. Tôi thấy điều này hữu ích nhất vì bây giờ tôi có thể bỏ qua bằng cách sử dụng bộ đệm và viết trực tiếp vào htmlbff. –