2014-04-11 7 views
5

के साथ प्रॉक्सी का उपयोग कैसे करें I C# और WebSocket4Net लाइब्रेरी का उपयोग कर एक सुरक्षित वेबसाकेट क्लाइंट बना रहा हूं। मैं अपने सभी कनेक्शनों को मानक प्रॉक्सी के माध्यम से प्रॉक्सी करना चाहता हूं।WebSocket4Net लाइब्रेरी

यह lib वेबस्केट कनेक्शन की प्रॉक्सी निर्दिष्ट करने के लिए SuperSocket.ClientEngine.Common.IProxyConnector का उपयोग करता है, लेकिन मुझे यकीन नहीं है कि मुझे इसे कैसे कार्यान्वित किया जाना है।

क्या कोई इस पुस्तकालय के साथ काम करता है और कुछ सलाह दे सकता है?

उत्तर

12

मुझे आसान डीबगिंग के लिए फिडलर के माध्यम से सभी वेबस्केट कनेक्शन को धक्का देने के लिए ऐसा ही करना था। चूंकि WebSocket4Net लेखक ने अपने IProxyConnector इंटरफ़ेस का पुनः उपयोग करने का विकल्प चुना है, System.Net.WebProxy सीधे उपयोग करने योग्य नहीं है।

this link पर लेखक अपने माता पिता के पुस्तकालय SuperSocket.ClientEngine से कार्यान्वयन का उपयोग कर आप CodePlex से डाउनलोड करने और दोनों SuperSocket.ClientEngine.Common.dll और SuperSocket.ClientEngine.Proxy.dll शामिल कर सकते हैं जिससे पता चलता है। मैं इसकी अनुशंसा नहीं करता हूं। इससे मुद्दों को संकलित करने का कारण बनता है क्योंकि उन्होंने (खराब) दोनों को ClientEngine और WebSocket4Net दोनों के साथ समान नामस्थान का उपयोग करना चुना है, जिसमें दोनों डीएलएल में परिभाषित आईपीरोक्सी कनेक्टर है।


क्या मेरे लिए काम किया:

फ़िडलर के माध्यम से डीबगिंग के लिए काम कर इसे प्राप्त करने के लिए, मैं अपने समाधान में इन दो वर्गों की नकल की है, और स्थानीय नाम स्थान के लिए उन्हें बदल दिया है:

HttpConnectProxy निम्न पंक्ति पर एक बग के लिए लग रहा था:

if (e.UserToken is DnsEndPoint)

बदलने के लिए:

if (e.UserToken is DnsEndPoint || targetEndPoint is DnsEndPoint)


उसके बाद, सब कुछ ठीक काम किया। नमूना कोड:

private WebSocket _socket; 

public Initialize() 
{ 
    // initialize the client connection 
    _socket = new WebSocket("ws://echo.websocket.org", origin: "http://example.com"); 

    // go through proxy for testing 
    var proxy = new HttpConnectProxy(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888)); 
    _socket.Proxy = (SuperSocket.ClientEngine.IProxyConnector)proxy; 

    // hook in all the event handling 
    _socket.Opened += new EventHandler(OnSocketOpened); 
    //_socket.Error += new EventHandler<ErrorEventArgs>(OnSocketError); 
    //_socket.Closed += new EventHandler(OnSocketClosed); 
    //_socket.MessageReceived += new EventHandler<MessageReceivedEventArgs>(OnSocketMessageReceived); 

    // open the connection if the url is defined 
    if (!String.IsNullOrWhiteSpace(url)) 
     _socket.Open(); 
} 

private void OnSocketOpened(object sender, EventArgs e) 
{ 
    // send the message 
    _socket.Send("Hello World!"); 
} 
+0

यह वास्तव में मुझे कुछ समय बचाया - धन्यवाद! – fcrick

+2

क्या इस समाधान के साथ प्रॉक्सी के साथ प्रमाणित करने का कोई तरीका है? –

+0

प्रॉक्सी के बारे में एक के बाद, कई बहुत अधिक डेटा, फिर असंगत प्रोटोकॉल के बाद, कई प्रॉक्सी प्राप्त करने के बाद प्रॉक्सी ने कनेक्शन को खारिज कर दिया (उर्फ ने स्टेटस कोड 2xx वापस नहीं किया) ... कृपया उत्तर अपडेट करें? – Gizmo

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