2012-09-13 14 views
58

का उपयोग कर ब्राउज़र से टीसीपी सॉकेट से कनेक्ट करना मेरे पास एक vb.net एप्लिकेशन है जो सॉकेट खोलता है और उस पर सुनता है।जावास्क्रिप्ट

मुझे ब्राउज़र पर चल रहे जावास्क्रिप्ट का उपयोग करके उस सॉकेट के माध्यम से उस सॉकेट के माध्यम से संवाद करने की आवश्यकता है। मुझे इस सॉकेट पर कुछ डेटा भेजने की ज़रूरत है ताकि इस सॉकेट पर जो ऐप सुन रहा हो, वह डेटा ले सकता है, कुछ रिमोट कॉल्स का उपयोग करके कुछ सामान करें और कुछ और डेटा प्राप्त करें और उसे सॉकेट पर वापस रख दें जो मेरी जावास्क्रिप्ट को चाहिए इसे ब्राउज़र में पढ़ें और प्रिंट करें।

Ive ने कोशिश की, socket.io, websockify लेकिन कोई भी उपयोगी साबित हुआ है।

इसलिए सवाल यह है कि मैं भी कोशिश कर रहा हूं? क्या कोई तरीका है कि किसी ब्राउज़र में चलने वाला जावास्क्रिप्ट एक टीसीपी सॉकेट से कनेक्ट हो सकता है और कुछ डेटा भेज सकता है और सॉकेट पर कुछ और डेटा प्रतिक्रिया के लिए इसे सुन सकता है और इसे ब्राउज़र पर प्रिंट कर सकता है।

यदि यह संभव है तो कोई मुझे सही दिशा में इंगित कर सकता है जिससे मुझे लक्ष्य स्थापित करने में मदद मिलेगी।

+1

नहीं, आप WebSockets को – Bergi

+1

@Bergi सीमित हैं - HTTP टीसीपी पर एक प्रोटोकॉल है, तो क्यों एक HTTP कनेक्शन बनाया जा सकता है लेकिन टी.सी.पी नहीं? –

+0

@ किलाका: क्योंकि ब्राउज़र वातावरण में उपलब्ध (मानक) एपीआई [उन तक सीमित हैं] (http://stackoverflow.com/q/10902256/1048572)। – Bergi

उत्तर

19

आप HTML5 Web Sockets उपयोग कर सकते हैं:

var connection = new WebSocket('ws://IPAddress:Port'); 

connection.onopen = function() { 
    connection.send('Ping'); // Send the message 'Ping' to the server 
}; 

http://www.html5rocks.com/en/tutorials/websockets/basics/

आपके सर्वर भी एक WebSocket सर्वर pywebsocket, वैकल्पिक रूप से आप अपने खुद के लिख सकते हैं जैसे के साथ सुन किया जाना चाहिए के रूप में Mozilla

में उल्लिखित अतिरिक्त:

अद्यतन: W3C ड्राफ्ट जनवरी 2016 से:

इस नाविक अंतरफलक के माध्यम से संभव हो जाएगा जैसा कि नीचे दिखाया:

http://raw-sockets.sysapps.org/#interface-tcpsocket

https://www.w3.org/TR/tcp-udp-sockets/

navigator.tcpPermission.requestPermission({remoteAddress:"127.0.0.1", remotePort:6789}).then(
() => { 
    // Permission was granted 
    // Create a new TCP client socket and connect to remote host 
    var mySocket = new TCPSocket("127.0.0.1", 6789); 

    // Send data to server 
    mySocket.writeable.write("Hello World").then(
     () => { 

      // Data sent sucessfully, wait for response 
      console.log("Data has been sent to server"); 
      mySocket.readable.getReader().read().then(
       ({ value, done }) => { 
        if (!done) { 
         // Response received, log it: 
         console.log("Data received from server:" + value); 
        } 

        // Close the TCP connection 
        mySocket.close(); 
       } 
      ); 
     }, 
     e => console.error("Sending error: ", e); 
    ); 
+22

इस उत्तर पर थोड़ा और विस्तार करने के लिए: सर्वर को वेबसॉकेट सर्वर से भी सुनना होगा। वेबसाकेट सीधे कच्चे टीसीपी सॉकेट से कनेक्ट नहीं हो सकते हैं। websockify एक ऐसा उपकरण है जो वेबसॉकेट-टू-टीसीपी प्रॉक्सी के रूप में कार्य करता है: यह आपके सर्वर पर बैठता है और वेबसॉकेट कनेक्शन के लिए सुनता है, और उसके बाद वेबसाकेट संचार को निर्दिष्ट टीसीपी सॉकेट से आगे बढ़ाता है। – apsillers

+24

यह ** प्रश्न का उत्तर नहीं देता ** - websocket टीसीपी पर एक प्रोटोकॉल है (उदाहरण के लिए HTTP की तरह) और सीधे टीसीपी संचार नहीं। –

+0

लेकिन ब्राउज़र विंडो में संदेश कैसे डाला जाए? :( – shzyincu

0

समाधान क्या तुम सच में देख रहे वेब सॉकेट है। हालांकि, क्रोमियम प्रोजेक्ट ने कुछ नई प्रौद्योगिकियां विकसित की हैं जो सीधे टीसीपी कनेक्शन TCP chromium

31

आपकी समस्या के लिए, वर्तमान में आपको इसके लिए एक्सएचआर या वेबसाइकिल पर निर्भर रहना होगा।

वर्तमान में कोई लोकप्रिय ब्राउज़र जावास्क्रिप्ट के लिए ऐसे किसी भी कच्चे सॉकेट एपीआई को लागू नहीं करता है जो आपको कच्चे सॉकेट बनाने और एक्सेस करने देता है, लेकिन जावास्क्रिप्ट में कच्चे सॉकेट एपीआई के कार्यान्वयन के लिए एक मसौदा चल रहा है। इन कड़ियों पर एक नज़र डालें:
http://www.w3.org/TR/raw-sockets/
https://developer.mozilla.org/en-US/docs/Web/API/TCPSocket

क्रोम अब कच्चे टीसीपी और उसके 'प्रयोगात्मक' एपीआई में यूडीपी सॉकेट के लिए समर्थन हासिल है। ये विशेषताएं केवल एक्सटेंशन के लिए उपलब्ध हैं और, हालांकि दस्तावेज, इस पल के लिए छिपे हुए हैं। ऐसा कहकर, कुछ डेवलपर पहले से ही दिलचस्प परियोजनाएं बना रहे हैं, जैसे कि this IRC client

इस API तक पहुंचने के लिए, आपको अपने एक्सटेंशन के मैनिफेस्ट में प्रयोगात्मक ध्वज को सक्षम करने की आवश्यकता होगी।सॉकेट का उपयोग करना बहुत सरल है, उदाहरण के लिए:

chrome.experimental.socket.create('tcp', '127.0.0.1', 8080, function(socketInfo) { 
    chrome.experimental.socket.connect(socketInfo.socketId, function (result) { 
     chrome.experimental.socket.write(socketInfo.socketId, "Hello, world!");   
    }); 
}); 
+0

कौन से ब्राउजर कच्चे सॉकेट का समर्थन करते हैं? –

+0

w3 कच्चे सॉकेट इत्यादि: https://github.com/whiteout-io/tcp-socket – Rondo

+1

वेबसाइट्सकेट्स और रॉसोकेट्स की तुलना में कोई प्रदर्शन बढ़ता है? –

3

jsocket देखें। इसे स्वयं इस्तेमाल नहीं किया है। अंतिम अपडेट के बाद से 3 साल से अधिक (26/6/2014 तक)।

* फ़्लैश :(

का उपयोग करता है documentation से:

<script type='text/javascript'> 
    // Host we are connecting to 
    var host = 'localhost'; 
    // Port we are connecting on 
    var port = 3000; 

    var socket = new jSocket(); 

    // When the socket is added the to document 
    socket.onReady = function(){ 
      socket.connect(host, port);    
    } 

    // Connection attempt finished 
    socket.onConnect = function(success, msg){ 
      if(success){ 
        // Send something to the socket 
        socket.write('Hello world');    
      }else{ 
        alert('Connection to the server could not be estabilished: ' + msg);    
      }  
    } 
    socket.onData = function(data){ 
      alert('Received from socket: '+data); 
    } 

    // Setup our socket in the div with the id="socket" 
    socket.setup('mySocket');  
</script> 
0

ws2s परियोजना ब्राउज़र साइड js को सॉकेट लाने के उद्देश्य से है यह एक WebSocket सर्वर जो सॉकेट से WebSocket बदलना है

।।

ws2s योजनाबद्ध आरेख

enter image description here

कोड नमूना:

var socket = new WS2S("wss://feling.io/ws2s-server/").newSocket() 

socket.onReady =() => { 
    socket.connect("feling.io", 80) 
    socket.send("GET/HTTP/1.1\r\nHost: feling.io\r\nConnection: close\r\n\r\n") 
} 

socket.onRecv = (data) => { 
    console.log('onRecv', data) 
}