c# - sending two strings , but receiving one over tcp -
हाय दोस्तों, यह मेरा ग्राहक और सर्वर कोड कैसे दिखता है:
ग्राहक: <पूर्व> TcpClient क्लाइंट = नया TcpClient (); क्लाइंट। कनेक्ट (आईपीएड्रेस। पर्सी ("1 9 82। 11.12"), 5004); NetworkStream स्ट्रीम = client.GetStream (); स्ट्रिंग उपयोगकर्ता नाम = लॉगिननाम_टाइट। पाठ; बाइट [] संदेश = एन्कोडिंग.ASCII.GetBytes (उपयोगकर्ता नाम); स्ट्रीम। लिखें (संदेश, 0, संदेश। लांघ); loginName_txt.Clear (); स्ट्रिंग पासवर्ड = password_txt.Text; बाइट [] message1 = एन्कोडिंग.ASCII.GetBytes (पासवर्ड); स्ट्रीम। लिखें (संदेश 1, 0, संदेश 1। लैंग); password_txt.Clear (); stream.Close (); client.Close ();
सर्वर:
TcpClient mClient = (TcpClient) क्लाइंट; NetworkStream स्ट्रीम = mClient.GetStream (); बाइट [] संदेश = नया बाइट [1024]; Int recv = stream.Read (संदेश, 0, संदेश। लैंग); उपयोगकर्ता नाम = एन्कोडिंग.ASCII.GetString (संदेश, 0, recv); UpdateUI ("उपयोगकर्ता नाम:" + एन्कोडिंग। ASCII.GetString (संदेश, 0, recv)); बाइट [] संदेश 1 = नया बाइट [1024]; Int recv1 = stream.Read (message1, 0, message1.Length); पासवर्ड = एन्कोडिंग। ASCII.GetString (message1, 0, recv1); UpdateUI ("पासवर्ड:" + एन्कोडिंग। ASCII.GetString (message1, 0, recv1)); stream.Close (); mClient.Close (); मैं ग्राहक से सर्वर पर स्ट्रिंग के रूप में उपयोगकर्ता नाम और पासवर्ड भेजने की कोशिश कर रहा हूं, लेकिन समस्या यह है कि मैं दोनों तार को सर्वर साइड पर एक के रूप में प्राप्त करता हूं, "संदेश में संग्रहीत" "। मुझे पता है कि किसी तरह मुझे पहली स्ट्रिंग के अंत को पहचानना चाहिए और पहले सरणी में डाल देना चाहिए और उसके बाद से शुरू करना और दूसरे को दूसरे सरणी में डाल देना चाहिए, लेकिन मुझे यह नहीं पता कि यह कैसे करना है। मैं आपको यह पूछना चाहूंगा कि क्या मुझे इस समस्या को सुलझाने में मदद मिलेगी।
समस्या यह है कि आप ' फिर से एक स्ट्रीम-आधारित प्रोटोकॉल (टीसीपी / आईपी) का उपयोग कर जैसे कि यह एक संदेश-आधारित प्रोटोकॉल था। यह। यहां कुछ विकल्प हैं, लेकिन सबसे आसान है:
- प्रत्येक संदेश के बाद एक सीमांकक लिखें
- पहले एक लम्बाई-उपसर्ग (संदेश में बाइट्स की संख्या) लिखें प्रत्येक संदेश
उत्तरार्द्ध वह है जिसे मैं आमतौर पर पसंद करता हूं - इसका मतलब है कि आप हमेशा यह जानते हैं कि आप इसे पढ़ना शुरू करने से पहले कितना डेटा पढ़ना चाहिए, जिसका अर्थ है कि आप कह सकते हैं कि कब हो किया, और आप जानते हैं कि पढ़ना शुरू करने से पहले आप आवंटित करने के लिए किस प्रकार का सरणी आवंटित करते हैं, भी। ओह, और इसका भी मतलब है कि कुछ भी बचने की कोई आवश्यकता नहीं है, लेकिन अगर आपके पास एक सीमांकक है जो स्वाभाविक रूप से किसी संदेश के भीतर हो सकता है, तो उसे बचने की आवश्यकता होगी।
Comments
Post a Comment