क्या send()
का लूप करने में कोई समस्या है जहां "const void *buf
" (दूसरा तर्क) बाइनरी मोड (fopen("C:\example.mp3", "rb")
) के रूप में खोले गए फ़ाइल का फ़ाइल डिस्क्रिप्टर है?बाइनरी डेटा भेजना
उत्तर
send
का तर्क स्मृति बफर को इंगित करना चाहिए, जो मान (बाइट्स) से भरा हुआ है, जिसे आप भेजना चाहते हैं। आप const void *buf
के const char *buf
के रूप में const void *buf
के तर्क का इलाज कर सकते हैं - यह केवल वर्णों की सरणी है, जो प्रेषण() फ़ंक्शन द्वारा नहीं बदला जाएगा।
लेकिन, fopen()
आपको FILE*
पर लौटाता है - यह विशेष संरचना FILE
के लिए एक सूचक है। इसलिए, यदि आप फ़ाइल की सामग्री भेजना चाहते हैं, तो आपको बफर fread()
फ़ंक्शन & FILE*
पॉइंटर का उपयोग करके सामग्री को पढ़ना चाहिए, और फिर tmp
बफर को send()
फ़ंक्शन पर खिलाया जाना चाहिए। fread()
& send()
के साथ इस कोड को दोहराएं जब तक कि आप अंत में फ़ाइल तक नहीं पहुंच जाएंगे।
नमूना कोड (http://developerweb.net/viewtopic.php?pid=28854 में पाया)
int file2socket (FILE *fp, int sockfd)
{
char tmp[8*1024];
int len;
int ret;
for (ret = 0;;) {
len = fread (tmp, 1, sizeof (tmp), fp);
if (len == 0) {
ret = feof (fp);
break;
}
if (!send (sockfd, tmp, len, 0)) break;
}
return (ret);
}
लिनक्स पर, एक सिस्टम कॉल 'sendfile' भी है जो वास्तव में उपयोगकर्ता की जगह को समाप्त करता है और चीजों को बहुत गति देता है - http://www.kernel.org/doc/man-pages/online/pages/man2/sendfile.2। एचटीएमएल –
मैं 'प्रेषण 'के वापसी मूल्य की जांच करूंगा। यह 'लेन' से कम कुछ मूल्य वापस कर सकता है, जिस स्थिति में आप 'tmp + r, len-r' के साथ पुनः प्रयास करना चाहते हैं, जहां 'r' पहले भेजे गए बाइट्स की संख्या है। – asveikau
लिनक्स पर, एक सिस्टम कॉल 'splice' है जो अप्रचलित' sendfile' है। – user611775
- 1. एंड्रॉइड पर POST के माध्यम से बाइनरी डेटा भेजना
- 2. बाइनरी डेटा
- 3. बाइनरी डेटा
- 4. गिट और बाइनरी डेटा
- 5. पायथन पोस्ट बाइनरी डेटा
- 6. डीबीयूनीट और बाइनरी डेटा
- 7. socket.io स्ट्रीमिंग बाइनरी डेटा
- 8. php: बाइनरी डेटा
- 9. आईफोन लेखन बाइनरी डेटा
- 10. ट्विस्टेड पायथन के साथ समस्या - बाइनरी डेटा
- 11. curl बाइनरी डेटा और फॉर्म डेटा
- 12. खेल केंद्र - डेटा भेजना और प्राप्त करना
- 13. सेवा से डेटा को गतिविधि में भेजना
- 14. कर्ल पोस्ट - डेटा-बाइनरी बनाम -
- 15. पर्ल और MongoDB बाइनरी डेटा
- 16. बाइनरी डेटा समानता की गणना
- 17. धारावाहिक टर्मिनल पर बाइनरी डेटा
- 18. बाइनरी डेटा संकुचित बेस 64
- 19. PHPUnit परीक्षण बाइनरी डेटा अपलोड
- 20. सी में बाइनरी डेटा पार्सिंग?
- 21. स्ट्रीम रीडर और बाइनरी डेटा
- 22. वेबसाइट्स बाइनरी डेटा संदेश (ऐरेबफर)
- 23. पायथन: बाइनरी डेटा खोजना/पढ़ना
- 24. मुझे एक बाइनरी पार्सर नाम दें। बाइनरी डेटा
- 25. बाइनरी प्लिस्ट
- 26. FileSystemObject लिखने के साथ बाइनरी डेटा लिखें()
- 27. सी ++ एसटीएल की स्ट्रिंग eqivalent बाइनरी डेटा
- 28. IE9 में बाइनरी डेटा कैसे पढ़ा जाए?
- 29. बाइनरी फ़ाइल से संरचित डेटा पढ़ें -?
- 30. बाइनरी फ़ाइल में डेटा कैसे संलग्न करें?
तुम्हारा मतलब आप सॉकेट से अधिक फ़ाइल की सामग्री भेजने के लिए करना चाहते हैं? यदि हां, तो कोई समस्या नहीं होनी चाहिए, लेकिन आपको फ़ाइल से डेटा को बफर में पढ़ना होगा, फिर डेटा को बफर में सॉकेट में प्रेषित करना होगा। –