प्रलेखन के बावजूद, NetworkStream.Write डेटा भेजने के बाद तक प्रतीक्षा नहीं करता है। इसके बजाए, यह तब तक प्रतीक्षा करता है जब तक डेटा को बफर में कॉपी नहीं किया जाता है और फिर वापस आता है। वह बफर पृष्ठभूमि में प्रसारित होता है।नेटवर्कस्ट्रीम। राइट तुरंत लौटाता है - मैं डेटा कैसे भेजना समाप्त कर सकता हूं?
यह वह समय है जो मेरे पास है। चाहे मैं ns.Write या ns.BeginWrite का कोई फर्क नहीं पड़ता - दोनों तुरंत लौटते हैं। एंडवाइट भी तुरंत लौटता है (जो समझ में आता है क्योंकि यह प्रेषण बफर को लिख रहा है, नेटवर्क पर नहीं लिख रहा है)।
bool done;
void SendData(TcpClient tcp, byte[] data)
{
NetworkStream ns = tcp.GetStream();
done = false;
ns.BeginWrite(bytWriteBuffer, 0, data.Length, myWriteCallBack, ns);
while (done == false) Thread.Sleep(10);
}
public void myWriteCallBack(IAsyncResult ar)
{
NetworkStream ns = (NetworkStream)ar.AsyncState;
ns.EndWrite(ar);
done = true;
}
मैं कैसे बता सकता हूं कि डेटा वास्तव में ग्राहक को कब भेजा गया है?
मैं अपना डेटा भेजने के बाद सर्वर से प्रतिक्रिया के लिए 10 सेकंड (उदाहरण के लिए) का इंतजार करना चाहता हूं अन्यथा मुझे लगता है कि कुछ गलत था। यदि मेरा डेटा भेजने में 15 सेकंड लगते हैं, तो यह हमेशा समय-समय पर होगा क्योंकि मैं केवल तब से गिनती शुरू कर सकता हूं जब NetworkStream.Write रिटर्न - जो डेटा भेजने से पहले है। मैं अपने नेटवर्क कार्ड को छोड़ने के बाद से 10 सेकंड गिनना शुरू करना चाहता हूं।
डेटा भेजने की मात्रा और इसे भेजने का समय अलग-अलग हो सकता है - इसे भेजने के लिए 1 सेकंड लग सकते हैं, इसे भेजने में 10 सेकंड लग सकते हैं, इसे भेजने में एक मिनट लग सकता है। जब सर्वर डेटा प्राप्त करता है तो यह प्रतिक्रिया भेजता है (यह एक एसएमटीपी सर्वर है), लेकिन अगर मेरा डेटा खराब हो गया है और प्रतिक्रिया कभी नहीं आती है, तो मैं हमेशा के लिए इंतजार नहीं करना चाहता, इसलिए मुझे यह जानने की जरूरत है कि मैं ' मैं डेटा भेजने के लिए इंतजार कर रहा हूं, या अगर मैं सर्वर का जवाब देने का इंतजार कर रहा हूं।
मैं उपयोगकर्ता को स्थिति दिखाना चाहता हूं - मैं "सर्वर पर डेटा भेजना" और "सर्वर से प्रतिक्रिया की प्रतीक्षा करना" दिखाना चाहता हूं - मैं यह कैसे कर सकता हूं?
क्या आपने 100 एमबी पैकेट के साथ NetworkStream.Write को आजमाया है? – Calmarius