1:服務器文件大小複製到緩衝器併發送它:Ç套接字發送和接收int,而不是字符緩衝區
snprintf(t_buf, 255, "%" PRIu32, fsize);
if(send(f_sockd, t_buf, sizeof(t_buf), 0) < 0){
perror("error on sending file size\n");
onexit(f_sockd, m_sockd, 0, 2);
}
2:客戶端接收的文件大小,放入FSIZE :
if(recv(f_sockd, t_buf, sizeof(t_buf), 0) < 0){
perror("error on receiving file size");
onexit(f_sockd, 0 ,0 ,1);
}
fsize = atoi(t_buf);
-----------------上面的代碼使我的程序完美工作!
的問題發生,如果我寫這樣的代碼,而不是以前的一個:
1:服務器發送FSIZE:
if(send(f_sockd, &fsize, sizeof(fsize), 0) < 0){
perror("error on sending file size\n");
onexit(f_sockd, m_sockd, 0, 2);
}
2,客戶端接收FSIZE:
if(recv(f_sockd, &fsize, sizeof(fsize), 0) < 0){
perror("error on receiving file size");
onexit(f_sockd, 0, 0, 1);
}
凡uint32_t fsize;
和char t_buf[256];
。
問題是,使用第一種方法都可以工作,但使用第二種方法,客戶端不會收到所有文件,只能收到一小部分文件。這段代碼有什麼問題?
謝謝!
[處理從recv的部分回報(c)中TCP](可能重複http://stackoverflow.com/questions/1386142/handling-partial-return-from-recv-tcp-in-c) –
看起來不像它,上面的代碼只是錯誤的;-)。 –
客戶端和服務器在同一臺機器上嗎?只是它的一部分意味着什麼? – hmjd