有人可以告訴我一種方法來通過TCP使用write()發送只有一部分字符數組?我想送前255個字節,然後作爲另一個數據塊發送下一個255個字節,如等/遺留而不是全部數據變量:如何用write()套接字編程發送字符數組的一部分
n = write(newsockfd,data,strlen(data));
有沒有辦法做到這一點?
有人可以告訴我一種方法來通過TCP使用write()發送只有一部分字符數組?我想送前255個字節,然後作爲另一個數據塊發送下一個255個字節,如等/遺留而不是全部數據變量:如何用write()套接字編程發送字符數組的一部分
n = write(newsockfd,data,strlen(data));
有沒有辦法做到這一點?
int len = strlen(data);
for (int i = 0; i < len;)
{
n = write(newsockfd, &data[i], min(len-i, 255));
if (n < 0) {
// error, do something ...
break;
}
i += n;
}
或者:
char *ptr = data;
int len = strlen(data);
while (len > 0)
{
n = write(newsockfd, ptr, min(len, 255));
if (n < 0) {
// error, do something ...
break;
}
ptr += n
len -= n;
}
我嘗試了第二批代碼,由於某種原因,它很容易中斷。如果我的文件超過幾百字節,或者我一次發送太多,它會在我發送後停止,並且客戶端沒有收到任何內容......真是令人困惑。 – user2644819
只測試了超過94-95字節的任何內容,並且不再向客戶端發送任何內容。什麼會造成這種情況? – user2644819
如果使用send()而不是write(),你有同樣的問題嗎?你確定你的客戶正在閱讀和確認數據嗎?您是否使用Wireshark等數據包嗅探器查看了網絡流量? –
與'255'替換'strlen的(數據)'? – goji
我在想這個,我想我不明白write()就夠了。如果我做255它將讀取第一個255字節,但如果我想然後發送char數組的下一個255字節呢?我試圖發送數據塊而不是一個完整的東西。 – user2644819
然後您需要繼續重複,直到您剩下<255個字節。在這種情況下,你發送剩下的東西。這將涉及跟蹤您的數據緩衝區已經發送了多少,並相應地通過緩衝區。我猜這是作業? – goji