2013-06-18 3 views
5

मैं अपने सर्वर से कृत्रिम रूप से अपने क्लाइंट को एक करीबी पैकेट भेजने की कोशिश कर रहा हूं, मुझे कितना कच्चा मूल्य भेजना चाहिए ताकि ग्राहक समझ सके कि मैं कनेक्शन बंद कर रहा हूं? क्या यह वेबसाइकिल प्रोटोकॉल के बीच भिन्न है?वेबसाकेट बंद पैकेट

+0

अपने ग्राहक =? – dtb

+0

क्या यह वही प्रश्न है जैसे http://stackoverflow.com/questions/17175016/alchemy-forcefully-disconnect-client – Amy

+0

http://msdn.microsoft.com/en-us/library/system.net.websockets.websocket .closeasync.aspx उचित लगता है। कृपया दिखाएं कि आपने क्या प्रयास किया और आपके लिए क्या काम नहीं किया। –

उत्तर

7

सबसे सरल स्तर पर - बस कनेक्शन कनेक्शन बंद करें - यह ठीक काम करेगा।

बहुत शुरुआती हिक्सी -76 में सिग्नलिंग बंद करने के लिए एक सरल अनुक्रम है: केवल दो बाइट 0xFF, 0x00 भेजें (पहला फ्रेम प्रकार है, दूसरा लंबाई है)।

बाद के सभी विनिर्देशों में, फ्रेम थोड़ा अधिक जटिल होते हैं; वे के रूप में टूट रहे हैं:

  • (1 बाइट) झंडे और opcode
  • (बाइट्स की चर संख्या) मुखौटा झंडा और पेलोड लंबाई
  • (वैकल्पिक, 4 बाइट्स) मुखौटा
  • ({लंबाई} बाइट्स) पेलोड

पहले भाग के लिए, opcode हम चाहते हैं 0x08 है, और यह (यह सिर्फ इंगित करता है कि फ्रेम कई संदेश पर विभाजित नहीं है "पंख" झंडा, 0x80 के साथ संयुक्त किया जाना चाहिए) - तो 0x88।

दूसरे भाग के लिए, हम शून्य-लंबाई संदेश का उपयोग कर सकते हैं, लेकिन हमें यह जानने की आवश्यकता है कि हम क्लाइंट-टू-सर्वर (हमेशा मास्क किए गए हैं, इसलिए हमें 0x80 का उपयोग करने की आवश्यकता है) या सर्वर-टू-क्लाइंट (कभी नहीं मुखौटा, तो हमें 0x00 का उपयोग करने की आवश्यकता है)।

तीसरा हिस्सा केवल शामिल है यदि मुखौटा ध्वज सेट किया गया है, तो क्लाइंट-टू-सर्वर; चूंकि हम एक पेलोड नहीं भेज रहे हैं, वहां क्रिप्टोग्राफ़िक रूप से सुरक्षित मास्क का आविष्कार करने का कोई मतलब नहीं है - हम केवल 0x00 0x00 0x00 0x00 का उपयोग कर सकते हैं।

चौथा छोड़ दिया गया है क्योंकि हम शून्य लंबाई बता रहे हैं।

तो: ग्राहक से सर्वर: 0x88 0x80 0x00 0x00 0x00 0x00

और सर्वर से ग्राहक: 0x88 0x00

+0

को कैसे समझते हैं, मेरे पास कच्चे प्रोटोकॉल परत तक पहुंच है, मैं वर्तमान में 'process.context.Send (नया बाइट [4] {80,01,00,00}, सच, सत्य); 'और ऐसा लगता है कि मुझे' वेबशॉट कनेक्शन 'ws: // localhost: 8000 /' विफल हुआ है: संपीड़ित बिट आवश्यक है 0 अगर कोई वार्तालाप डिफ्लेट-फ्रेम एक्सटेंशन 'त्रुटि नहीं है। – user2498443

+0

@user मैं इसके साथ सहमत हूं; आपको मूल्य 80 कहां से मिला? वह आरएसवी 1 और आरएसवी 3 सेट, ओपोड शून्य है। आपको फिन बिट सेट के साथ ओपोड 8 भेजने की आवश्यकता है - दशमलव 136? (मेरे सिर में हो गया - मैंने उस मान की जांच नहीं की है) –

+1

मुझे खेद है कि प्रोटोकॉल के बीच यह अलग है? मैं कनेक्शन तक नहीं पहुंचता, मैं सी # में कीमिया का उपयोग करता हूं और बेवकूफ रूप से उनके पास कनेक्शन समाप्त करने की कोई विधि नहीं है। सभी मदद आदमी के लिए धन्यवाद! :) – user2498443

संबंधित मुद्दे