জাভাস্ক্রিপ্ট ব্যবহার করে ব্রাউজার থেকে টিসিপি সকেটে সংযুক্ত হচ্ছে


111

আমার কাছে একটি vb.net অ্যাপ্লিকেশন রয়েছে যা একটি সকেট খুলবে এবং এটি শুনবে।

ব্রাউজারে চলমান জাভাস্ক্রিপ্ট ব্যবহার করে আমার এই সকেটের মাধ্যমে সেই অ্যাপ্লিকেশনে যোগাযোগ করতে হবে। এটি হ'ল আমাকে এই সকেটে কিছু ডেটা প্রেরণ করা প্রয়োজন যাতে এই সকেটে যে অ্যাপ্লিকেশনটি শুনছে সেগুলি সেই ডেটা নিতে পারে, কিছু দূরবর্তী কল ব্যবহার করে কিছু স্টাফ করতে পারে এবং আরও কিছু ডেটা পেতে পারে এবং আমার জাভাস্ক্রিপ্টটির যে সকেটে দরকার তা সকেটে ফিরিয়ে দিতে পারে এটি ব্রাউজারে পড়ুন এবং মুদ্রণ করুন।

Ive চেষ্টা করেছেন, সকেট.ইও, ওয়েবসকাইফ কিন্তু কোনওটিই কার্যকর হিসাবে প্রমাণিত হয়নি।

সুতরাং প্রশ্ন, আমি কি সম্ভব চেষ্টা করছি? ব্রাউজারে চলছে এমন কোনও জাভাস্ক্রিপ্ট কোনও টিসিপি সকেটের সাথে সংযোগ স্থাপন করতে এবং কিছু ডেটা প্রেরণ করতে এবং সকেটে আরও কিছু ডেটা প্রতিক্রিয়া জানতে শুনতে এবং এটি ব্রাউজারে মুদ্রণ করতে পারে।

যদি এটি সম্ভব হয় তবে কেউ আমাকে সঠিক দিকে নির্দেশ করতে পারে যা আমাকে লক্ষ্যটি প্রতিষ্ঠায় সহায়তা করবে।


3
না, আপনি
ওয়েবস্কিটের

2
@ বার্গি - এইচটিটিপি হ'ল টিসিপি ওভার প্রোটোকল, সুতরাং কেন এইচটিপি সংযোগ টিসিপি না করে তৈরি করা যায়?
অ্যালিকেলজিন-কিলাকা

@ কিলাকা: কারণ ব্রাউজার পরিবেশে উপলব্ধ (স্ট্যান্ডার্ড) এপিআইগুলি সেগুলির মধ্যে সীমাবদ্ধ
বার্গি

সম্ভাব্য অনুরূপ: stackoverflow.com/questions/9154035/...
AlikElzin-kilaka

6
আমি জাভাস্ক্রিপ্টের মেরুদণ্ডকে সজ্জিত করে একটি নতুন স্ট্যান্ডার্ড দেখছি: w3.org/TR/raw-socket
অ্যালিক্লিজিন-কিলাকা

উত্তর:


57

আপনার সমস্যা হিসাবে, বর্তমানে আপনাকে এটির জন্য এক্সএইচআর বা ওয়েবসকেটের উপর নির্ভর করতে হবে।

বর্তমানে কোনও জনপ্রিয় ব্রাউজার জাভাস্ক্রিপ্টের জন্য এমন কোনও কাঁচা সকেট এপিআই প্রয়োগ করে নি যা আপনাকে কাঁচা সকেট তৈরি করতে এবং অ্যাক্সেস করতে দেয় তবে জাভাস্ক্রিপ্টে কাঁচা সকেট এপিআই বাস্তবায়নের জন্য একটি খসড়া চলছে। এই লিঙ্কগুলি একবার দেখুন:
http://www.w3.org/TR/raw-sockets/
https://developer.mozilla.org/en-US/docs/Web/API/TCPSket

ক্রোমের এখন তার 'পরীক্ষামূলক' এপিআইতে কাঁচা টিসিপি এবং ইউডিপি সকেটের জন্য সমর্থন রয়েছে। এই বৈশিষ্ট্যগুলি কেবল এক্সটেনশনের জন্য উপলভ্য এবং ডকুমেন্টেড হলেও মুহুর্তের জন্য এটি লুকিয়ে রয়েছে। এই কথাটি বলে, কিছু বিকাশকারী ইতিমধ্যে এটি ব্যবহার করে আকর্ষণীয় প্রকল্প তৈরি করছে যেমন এই আইআরসি ক্লায়েন্ট

এই এপিআই অ্যাক্সেস করতে আপনার এক্সটেনশনের ম্যানিফেস্টে পরীক্ষামূলক পতাকাটি সক্ষম করতে হবে। সকেট ব্যবহার করা বেশ সোজা, উদাহরণস্বরূপ:

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!");         
    });
});

কোন ব্রাউজারগুলি কাঁচা সকেট সমর্থন করে?
অলিকএলজিন-কিলাকা

2
ওয়েবসাইটসকেট এবং রাওসকেটের তুলনায় কোনও পারফরম্যান্স বৃদ্ধি পায়?
নিকক নিউম্যান

3
ব্রাউজারে জাভাস্ক্রিপ্টকে কোনও টিসিপি পোর্ট, একটি সুরক্ষা গর্তের সাথে সংযোগ স্থাপনের অনুমতি দিচ্ছে না? আপনার ফায়ারফক্স / ক্রোমে জাভাস্ক্রিপ্ট কল্পনা করুন যে আপনি স্থানীয়ভাবে চালান এমন কোনও কিছুর সাথে সংযোগ স্থাপন করছেন (মাইএসকিউএল ডিবি বলুন) এবং কোনও খারাপ সাইটে ডেটা প্রকাশ করবেন?
অরুণ অবানাথন

@ অরুণাওয়ানাথন আপনি অজ্যাক্সের সাথে যা কিছু করুন আপনি সকেট এবং উইস-বিপরীতে যা করতে পারেন ... আমার মনে হয় এমন কোনও সুরক্ষা সমস্যা নেই।
ফিরস আবদ

1
@ ফিরাসআবিডিআলাহমান আমার মনে হয় এইচটিটিপি / এস এর জন্য ব্রাউজার আচরণ পরিচালনা করে এমন বিভিন্ন সুরক্ষা নীতি রয়েছে । সুতরাং টিসিপির মাধ্যমে ব্রাউজারের সকেট সংযোগ এইচটিটিপি / এস এর মতো নয়।
অরুণ অবানাথন

30

নীচে প্রদর্শিত হিসাবে নেভিগেটর ইন্টারফেসের মাধ্যমে এটি সম্ভব হবে:

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)
    );
  }
);

আরও বিশদটি w3.org টিসিপি-ইউডিপি-সকেট ডকুমেন্টেশনে বর্ণিত হয়েছে।

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

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

আর একটি বিকল্প হ'ল ক্রোম সকেট ব্যবহার করা

সংযোগ তৈরি করা হচ্ছে

chrome.sockets.tcp.create({}, function(createInfo) {
  chrome.sockets.tcp.connect(createInfo.socketId,
    IP, PORT, onConnectedCallback);
});

ডেটা প্রেরণ করা হচ্ছে

chrome.sockets.tcp.send(socketId, arrayBuffer, onSentCallback);

তথ্য প্রাপ্তি

chrome.sockets.tcp.onReceive.addListener(function(info) {
  if (info.socketId != socketId)
    return;
  // info.data is an arrayBuffer.
});

আপনি ব্যবহারের চেষ্টাও ব্যবহার করতে পারেন 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/

আপনার সার্ভারটি অবশ্যই ওয়েবস্কট সার্ভার যেমন পাইউবসকেটের সাথে শুনতে পাচ্ছে, বিকল্পভাবে আপনি মোজিলায় বর্ণিত হিসাবে নিজের লেখা লিখতে পারেন


25
এই উত্তরে আরও কিছুটা বিস্তারিত জানাতে: সার্ভারটি অবশ্যই ওয়েবস্কট সার্ভারের সাথে শোনানো উচিত। ওয়েবসকেটগুলি কোনও কাঁচা টিসিপি সকেটের সাথে সরাসরি সংযোগ করতে পারে না। ওয়েবসকাইফাই এমন একটি সরঞ্জাম যা ওয়েবস্কট-টু-টিসিপি প্রক্সি হিসাবে কাজ করে: এটি আপনার সার্ভারে বসে ওয়েবসকেট সংযোগগুলির জন্য শোনায় এবং তারপরে একটি নির্দিষ্ট টিসিপি সকেটে এবং ওয়েবস্কট যোগাযোগটি ফরোয়ার্ড করে।
অ্যাপসিলার

58
এটি প্রশ্নের উত্তর দেয় না - ওয়েবসকেট টিসিপি ওভার প্রোটোকল (উদাহরণস্বরূপ HTTP এর মতো) এবং সরাসরি টিসিপি যোগাযোগ নয়।
অ্যালিকেলজিন-কিলাকা

1
তবে কীভাবে বার্তাটি ব্রাউজার উইন্ডোতে রাখবেন? :(
shzyincu

3
এই উত্তরটি সম্পূর্ণ ভুল এবং মুছে ফেলা উচিত।
ব্র্যাড

1
@ ব্র্যাড এই উত্তরটি আমাকে সহায়তা করেছে এবং এটি অবশ্যই 22 টি উর্ধ্বতন প্রাপ্ত কয়েকজনকে সহায়তা করেছে।
ব্যবহারকারী 1378687

6

ডাব্লুএস 2 প্রকল্পটি ব্রাউজার-সাইড জেএসে সকেট আনার লক্ষ্য। এটি একটি ওয়েবসকেট সার্ভার যা ওয়েবকেটকে সকেটে রূপান্তরিত করে।

ws2s স্কিম্যাটিক ডায়াগ্রাম

এখানে চিত্র বর্ণনা লিখুন

কোড নমুনা:

var socket = new WS2S("wss://ws2s.feling.io/").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)
}

5

দেখুন jsocket । এটি নিজে ব্যবহার করিনি। সর্বশেষ আপডেটের পরে (26/6/2014 হিসাবে) 3 বছরের বেশি হয়েছে।

* ফ্ল্যাশ ব্যবহার করে :(

ডকুমেন্টেশন থেকে :

<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

আপনি যে সমাধানটি সন্ধান করছেন তা হ'ল ওয়েব সকেট। তবে ক্রোমিয়াম প্রকল্পটি এমন কিছু নতুন প্রযুক্তি তৈরি করেছে যা সরাসরি টিসিপি সংযোগগুলি টিসিপি ক্রোমিয়াম


0

আপনি যা চান তা অর্জন করতে আপনাকে দুটি অ্যাপ্লিকেশন লিখতে হবে (উদাহরণস্বরূপ জাভা বা পাইথন উভয় ক্ষেত্রে):

  1. ব্রিজ অ্যাপ্লিকেশন যা ক্লায়েন্টের মেশিনে বসে এবং টিসিপি / আইপি সকেট এবং ওয়েবসকেট উভয়ের সাথেই ডিল করতে পারে। এটি প্রশ্নে টিসিপি / আইপি সকেটের সাথে যোগাযোগ করবে।

  2. সার্ভার-সাইড অ্যাপ্লিকেশন (যেমন একটি জেএসপি / সার্লেট ওয়ার) যা ওয়েবস্কোকে কথা বলতে পারে। এটিতে একটি ব্রাউজার অ্যাক্সেস করার জন্য কমপক্ষে একটি HTML পৃষ্ঠা (প্রয়োজনে সার্ভার-সাইড প্রসেসিং কোড সহ) অন্তর্ভুক্ত রয়েছে।

এটি এই মত কাজ করা উচিত

  1. ব্রিজটি ওয়েব অ্যাপ্লিকেশনটিতে একটি ডাব্লুএস সংযোগ খুলবে (কারণ কোনও সার্ভার ক্লায়েন্টের সাথে সংযোগ করতে পারে না)।
  2. ওয়েব অ্যাপ্লিকেশন ক্লায়েন্টকে নিজেকে সনাক্ত করতে বলবে
  3. ব্রিজ ক্লায়েন্ট সার্ভারে কিছু আইডি তথ্য প্রেরণ করে, যা সেতুটি সনাক্ত করার জন্য এটি সংরক্ষণ করে।
    1. ব্রাউজার-দর্শনযোগ্য পৃষ্ঠাটি জেএস ব্যবহার করে ডাব্লুএস সার্ভারের সাথে সংযোগ স্থাপন করে।
    2. পদক্ষেপ 3 পুনরাবৃত্তি করুন, তবে জেএস-ভিত্তিক পৃষ্ঠার জন্য
    3. জেএস-ভিত্তিক পৃষ্ঠাটি সার্ভারে একটি কমান্ড প্রেরণ করে, এটি অবশ্যই যেতে হবে bridge
    4. সার্ভার কমান্ডটি ব্রিজের দিকে এগিয়ে দেয়।
    5. ব্রিজটি একটি টিসিপি / আইপি সকেট খোলে এবং এটির সাথে ইন্টারঅ্যাক্ট করে (একটি বার্তা প্রেরণ করে, একটি প্রতিক্রিয়া পায়)।
    6. ব্রিজ ডাব্লুএস এর মাধ্যমে সার্ভারে একটি প্রতিক্রিয়া প্রেরণ করে
    7. ডাব্লুএস ব্রাউজারটি দেখতে পাতায় প্রতিক্রিয়া ফরোয়ার্ড করে
    8. জেএস প্রতিক্রিয়া প্রক্রিয়া করে এবং সেই অনুযায়ী প্রতিক্রিয়া জানায়
    9. ক্লায়েন্ট সংযোগ বিচ্ছিন্ন / আনলোড না হওয়া পর্যন্ত পুনরাবৃত্তি করুন

দ্রষ্টব্য 1: উপরের পদক্ষেপগুলি একটি বিস্তৃত সরলকরণ এবং এতে ত্রুটি পরিচালনা ও ক্যালআঅলাইভ অনুরোধ সম্পর্কিত তথ্য অন্তর্ভুক্ত নয়, ইভেন্টটি যদি ক্লায়েন্টের অকারণে সংযোগ বিচ্ছিন্ন হয়ে যায় বা সার্ভার ক্লায়েন্টকে জানাতে হয় যে এটি বন্ধ হচ্ছে / পুনরায় চালু হচ্ছে।

নোট 2: আপনার প্রয়োজনের উপর নির্ভর করে, যদি টিসিপি / আইপি সকেট সার্ভার প্রশ্নে (সেতুটি কথা বলে) সার্ভার অ্যাপের মতো একই মেশিনে থাকে তবে এই উপাদানগুলিকে একের সাথে একীভূত করা সম্ভব হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.