कहा जाता है, मैं एक सी # वेब सॉकेट सर्वर को लागू करने की कोशिश कर रहा हूं, लेकिन यह मुझे कुछ परेशानी दे रहा है। मैं जावास्क्रिप्ट के साथ पृष्ठ होस्ट करने के लिए एक वेबसर्वर (एएसपी.नेट) चला रहा हूं और वेब सॉकेट सर्वर को सी # कंसोल एप्लिकेशन के रूप में कार्यान्वित किया गया है।वेबस्केट सर्वर: वेब सॉकेट पर ऑनपेन फ़ंक्शन को कभी भी
मैं क्लाइंट से कनेक्शन प्रयास का पता लगाने में सक्षम हूं (क्रोम जावास्क्रिप्ट चला रहा है) और क्लाइंट से हैंडशेक पुनर्प्राप्त करने के लिए भी। लेकिन क्लाइंट उस हैंडशेक को स्वीकार नहीं कर रहा है जिसे मैं वापस भेज रहा हूं (वेब सॉकेट पर onopen
फ़ंक्शन कभी नहीं कहा जाता है)।
मैं The Web Socket protocol पढ़ रहा हूं और मैं नहीं देख सकता कि मैं क्या गलत कर रहा हूं। यहाँ सर्वर कोड का एक सा:
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8181);
listener.Bind(ep);
listener.Listen(100);
Console.WriteLine("Wainting for connection...");
Socket socketForClient = listener.Accept();
if (socketForClient.Connected)
{
Console.WriteLine("Client connected");
NetworkStream networkStream = new NetworkStream(socketForClient);
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
//read handshake from client:
Console.WriteLine("HANDSHAKING...");
char[] shake = new char[255];
streamReader.Read(shake, 0, 255);
string handshake =
"HTTP/1.1 101 Web Socket Protocol Handshake\r\n" +
"Upgrade: WebSocket\r\n" +
"Connection: Upgrade\r\n" +
"WebSocket-Origin: http://localhost:8080\r\n" +
"WebSocket-Location: ws://localhost:8181\r\n" +
"\r\n";
streamWriter.Write(handshake);
streamWriter.Flush();
मैं पोर्ट 8080 और बंदरगाह 8181 पर वेब सॉकेट सर्वर पर वेब सर्वर पर चल रहा हूँ, दोनों मेरे स्थानीय होस्ट पर।
मैंने विभिन्न एन्कोडिंग (ASCII, बाइट्स और हेक्स) में हैंडशेक भेजने की कोशिश की है, लेकिन ऐसा कोई फर्क नहीं पड़ता है। कनेक्शन पूरी तरह से स्थापित नहीं है। जावास्क्रिप्ट इस तरह दिखता है:
var ws;
var host = 'ws://localhost:8181';
debug("Connecting to " + host + " ...");
try {
ws = new WebSocket(host);
} catch (err) {
debug(err, 'error');
}
ws.onopen = function() {
debug("connected...", 'success');
};
ws.onclose = function() {
debug("Socket closed!", 'error');
};
ws.onmessage = function (evt) {
debug('response: ' + evt, 'response');
};
मेरा अनुमान है कि उस त्रुटि क्रोम के रूप में एकदम सही ढंग से जानकारी भेज रहा है सी # सर्वर में निहित है, लेकिन जैसा कि एक ने कहा onopen
समारोह कभी नहीं कहा जाता है।
तो मेरा प्रश्न संक्षेप में: क्या आप में से कोई भी इसे पूरा कर चुका है - और यदि हां, तो आपने यह कैसे किया? और कारण: क्या आपको कोड में कोई स्पष्ट त्रुटियां दिखाई देती हैं (उम्मीद है कि पूछने के लिए बहुत कुछ नहीं है)
आप फ्लेक उपयोग कर सकते हैं का उपयोग करता है लगता है, उपलब्ध NuGet पर: http://nuget.org/packages/Fleck/ –