是否可以使用电子创建tcp客户端

时间:2017-01-16 10:18:02

标签: electron

是否可以使用电子创建tcp客户端? 或者我们可以访问chrome socket api吗?

https://developer.chrome.com/apps/sockets_tcp

3 个答案:

答案 0 :(得分:3)

您可以使用Electron中的Node net API来实现TCP客户端。

答案 1 :(得分:3)

您可以使用Electron中的Node net API来实现TCP客户端。

尝试使用一个小型套接字服务器作为示例代码(不要忘记更改IP地址),例如SocketTest java应用程序(HERE)。

在连接时,你应该看到一个"世界!"服务器端的字符串。尝试从服务器发送此消息:

{
"nom":"Xplorer",
"prenom":"Yann"
}

你应该看到Hello Yann!在您的电子控制台中。

    'use strict';

const electron = require('electron');

const app = electron.app;

const path = require('path');
const url = require('url');
const net = require('net');


const BrowserWindow = electron.BrowserWindow;

let mainWindow;
var socketClient


    const BrowserWindow = electron.BrowserWindow;

    let mainWindow;
    var socketClient

    function createWindow () {
      // Create the browser window.
      mainWindow = new BrowserWindow({width: 800, height: 600,backgroundColor:'#FFFFFF', frame:false})

      // and load the index.html of the app.
      mainWindow.loadURL(url.format({
        pathname: path.join(__dirname+'/html/', 'main.html'),
        protocol: 'file:',
        slashes: true
      }))

      // Open the DevTools.
      //mainWindow.webContents.openDevTools()

      // Emitted when the window is closed.
      mainWindow.on('closed', function () {
        // Dereference the window object, usually you would store windows
        // in an array if your app supports multi windows, this is the time
        // when you should delete the corresponding element.
        mainWindow = null
      })

      /* Instance socket on create window */
      console.log('Try to connect');
      socketClient = net.connect({host:'192.16.122.3', port:9042},  () => {
        // 'connect' listener
        console.log('connected to server!');
        socketClient.write('world!\r\n');
      });

      socketClient.on('data', (data) => {
        console.log(data.toString());
        var person = JSON.parse(data);

        console.log('Hello '+person.prenom+"!");

      });
      socketClient.on('end', () => {
        console.log('disconnected from server');
      });

      //mainWindow.openDevTools();
    }
    app.on('before-quit',function(){
      socketClient.end();
    })

见到你。

答案 2 :(得分:2)

只测试是否存在chrome API很容易。如果不是,我使用节点API。因此,我的Chrome应用程序和电子应用程序具有相同的代码库。 2个API略有不同,所以我在这里发布如何做到这一点。

  let client = null; // node socket
  let socketId; // chrome API socket id

  function toBuffer(ab) {
    return new Buffer(new Uint8Array(ab));
  }

  function toArrayBuffer(buf) {
    return new Uint8Array(buf).buffer;
  }

  function initConnToServer (ip, port) {
    return new Promise((resolve, reject) => {
      if(typeof chrome !== 'undefined') {
        chrome.sockets.tcp.create({}, r => {
          socketId = r.socketId;
          chrome.sockets.tcp.connect(r.socketId, ip, port, code => resolve(code));
        });
      } else {
        client = new net.Socket(); // return a Node socket
        client.connect(port, ip);
        client.on('connect', () => resolve());
      }
    });
  };

  function sendToServer_simple (data) {
    return new Promise((resolve, reject) => {
      if(typeof chrome !== 'undefined') {
        chrome.sockets.tcp.send(socketId, data, r => {});
        chrome.sockets.tcp.onReceive.addListener(receiveInfo => resolve(receiveInfo.data));
      } else {
        client.write(toBuffer(data));
        client.on('data', data => resolve(toArrayBuffer(data)));
      }
    });
  };