JavaScript 套接字 - 在 JavaScript 中使用套接字

位置:首页>文章>详情   分类: Web前端 > 编程技术   阅读(441)   2024-05-15 11:12:38

JavaScript 套接字教程展示了如何在 JavaScript 中使用套接字。

在编程中,插件座 是网络上运行的两个程序之间通信的端点。套接字用于在客户端程序和服务器程序之间创建连接。

套接字 API 在 Node.js net 模块中可用。

笔记: 在网络中,术语套接字具有不同的含义。它用于 IP 地址和端口号的组合。

JS 套接字 HEAD 请求

HEAD 请求是没有消息正文的 HTTP GET 请求。请求/响应的标头包含元数据,例如 HTTP 协议版本或内容类型。

head_req.js
var net = require('net');

var host = 'webcode.me';
var port = 80;

var socket = new net.Socket();

socket.connect(port, host, () => {

    socket.write("HEAD / HTTP/1.0\r\n");
    socket.write("Host: webcode.me\r\n");
    socket.write("User-Agent: Node.js HTTP client\r\n");
    socket.write("Accept: text/html\r\n");
    socket.write("Accept-Language: en-US\r\n");
    socket.write("Connection: close\r\n\r\n");
});

socket.on('data', (data) => {

    console.log(`${data}`);
    socket.destroy();
});

head 请求通过 HEAD 命令发出,后跟资源 URL 和 HTTP 协议版本。请注意,\r\n 是通信过程的必需部分。 RFC 7231 文档中描述了详细信息。

client.on('data', (data) => {

    console.log(`${data}`);
    client.destroy();
});
$ nodejs head_req.js 
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Wed, 10 Feb 2021 08:40:08 GMT
Content-Type: text/html
Content-Length: 348
Last-Modified: Sat, 20 Jul 2019 11:49:25 GMT
Connection: close
ETag: "5d32ffc5-15c"
Accept-Ranges: bytes

JS套接字GET请求

HTTP GET 方法请求指定资源的表示。使用 GET 的请求应该只检索数据。

get_req.js
var net = require('net');

var host = 'webcode.me';
var port = 80;

var socket = new net.Socket();
socket.connect(port, host, () => {
    socket.write('GET / HTTP/1.0\r\n\r\n');
});

socket.on('data', (data) => {
    console.log(`${data}`);
    socket.destroy();
});

该示例使用 GET 请求读取 webcode.me 的主页。它返回它的标题和它的正文。

socket.write('GET / HTTP/1.0\r\n\r\n');

我们将 GET 请求写入套接字。

$ nodejs get_req.js 
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Wed, 10 Feb 2021 08:45:01 GMT
Content-Type: text/html
Content-Length: 348
Last-Modified: Sat, 20 Jul 2019 11:49:25 GMT
Connection: close
ETag: "5d32ffc5-15c"
Access-Control-Allow-Origin: *
Accept-Ranges: bytes

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My html page</title>
</head>
<body>

    <p>
        Today is a beautiful day. We go swimming and fishing.
    </p>
    
    <p>
         Hello there. How are you?
    </p>
    
</body>
</html>

JS 套接字 QOTD

每日报价服务是一种有用的调试和测量工具。当天服务的报价只是简单地发送一条短消息,而不考虑输入。端口 17 保留用于当日服务的报价。

qotd.js
var net = require('net');

var host = 'djxmmx.net';
var port = 17;

var socket = new net.Socket();

socket.connect(port, host, function() {
    socket.write('');
});

socket.on('data', (data) => {

    console.log(`${data}`);
    socket.destroy();
});

该示例创建了一个连接到 QOTD 服务的客户端程序。

socket.write('');

我们向套接字发送一条空消息。

socket.on('data', (data) => {

    console.log(`${data}`);
    socket.destroy();
});

我们收到输出并关闭套接字。

$ nodejs qotd.js 
"The secret of being miserable is to have leisure to bother about whether
 you are happy or not.  The cure for it is occupation."
 George Bernard Shaw (1856-1950)

JS套接字发送邮件

要通过套接字发送电子邮件,我们使用 SMTP 命令,例如 HELO、MAIL FROM 和 DATA。

send_mail.js
let net = require('net');

let host = '192.168.0.23';
let port = 25;

let from = "john.doe@example.com";
let to = "root@core9";
let name = "John Doe";
let subject = "Hello";
let body = "Hello there";

let socket = new net.Socket();

socket.connect(port, host, () => {

    socket.write("HELO core9\n");
    socket.write(`MAIL FROM: <${from}>\n`);
    socket.write(`RCPT TO: <${to}>\n`);
    socket.write("DATA\n");
    socket.write(`From:${name}\n`);
    socket.write(`Subject:${subject}\n`);
    socket.write(`${body}`);
    socket.write("\r\n.\r\n");
    socket.write("QUIT\n");
});

socket.on('data', data => {
  console.log(`${data}`);
});

socket.on('close', () => {
  socket.destroy();
});

该示例将电子邮件发送到本地网络上的计算机。

$ nodejs send_email.js 
220 core9 ESMTP Sendmail 8.15.2/8.15.2; Thu, 11 Feb 2021 10:07:14 +0100 (CET)
250 core9 Hello spartan.local [192.168.0.20], pleased to meet you

250 2.1.0 <john.doe@example.com>... Sender ok
250 2.1.5 <root@core9>... Recipient ok
354 Enter mail, end with "." on a line by itself
250 2.0.0 11B97EKF001178 Message accepted for delivery
221 2.0.0 core9 closing connection

我们发送电子邮件。

From john.doe@example.com Thu Feb 11 10:07:14 2021
Return-Path: <john.doe@example.com>
Received: from core9 (spartan.local [192.168.0.20])
        by core9 (8.15.2/8.15.2) with SMTP id 11B97EKF001178
        for <root@core9>; Thu, 11 Feb 2021 10:07:14 +0100 (CET)
        (envelope-from john.doe@example.com)
Date: Thu, 11 Feb 2021 10:07:14 +0100 (CET)
Message-Id: <202102110907.11B97EKF001178@core9>
From:John.Doe
Subject:Hello
To: undisclosed-recipients:;
Status: RO

Hello there

我们在接收端检查电子邮件。

JS套接字回显服务器

回显服务器是一个用于测试的简单服务器。它只是将消息发送回客户端。

echo_server.js
var net = require('net');

var host = '0.0.0.0';
var port = 5050;

net.createServer(sock => {

    console.log(`connected: ${sock.remoteAddress}:${sock.remotePort}`);

    sock.on('data', (data) => {
        console.log(`${sock.remoteAddress}: ${data}`);
        sock.write(`${data}`);
    });

    sock.on('close', (data) => {
        console.log(`connection closed: ${sock.remoteAddress}:${sock.remotePort}`);
    });

}).listen(port, host);

console.log(`Server listening on ${host}:${port}`);

使用 createServer 函数创建一个新服务器。 listen 函数启动服务器监听连接。

$ nodejs echo_server.js 
Server listening on 0.0.0.0:5050

我们启动服务器。

$ echo hello | nc localhost 5050
hello

使用 nc 工具,我们向回显服务器发送一条消息。

在本文中,我们使用了 JavaScript 中的套接字。

地址:https://www.cundage.com/article/javascript-socket.html

相关阅读

Big.js 教程展示了如何使用 Big.js 模块在 JavaScript 中使用任意精度的大十进制算法。 大.js 大.js 是一个小型、快速的 JavaScript 库,用于任意精度的十进...
faker.js 教程展示了如何使用 faker.js 库在 JavaScript 中生成虚假数据。 伪造者.js 伪造者.js 是一个用于生成假数据的 JavaScript 库。构建和测试我们...
Node.js 教程是 Node.js 的入门教程。我们描述了 Node.js 并提供了一些 Node.js 代码示例。 Nojde.js 节点.js 是一个开源、跨平台的 JavaScript...
JavaScript 数组教程展示了如何在 JavaScript 中使用数组。 数组是许多值的集合。数组项称为数组的元素。每个元素都可以通过索引引用。数组是从零开始的。 JavaScript 数...
Liquid.js 教程展示了如何在 JavaScript 应用程序中使用 Liquid 模板引擎。 液体 液体 是一个 JavaScript 模板引擎。它是由 Shopify 创建的。 Liq...
Rollup.js 教程展示了如何使用 Rollup.js 模块打包器。 卷起 是一个 JavaScript 模块打包器。它将较小的代码片段编译成较大的库或应用程序包
Moment.js 教程展示了如何使用 Moment.js 模块在 JavaScript 中处理日期和时间。 时刻.js 时刻.js 是一个轻量级的 JavaScript 日期库,用于解析、验证...
Day.js 教程展示了如何使用 Day.js 模块在 JavaScript 中处理日期和时间。 日.js Day.js 是一个极简主义的 JavaScript 日期库,用于解析、验证、操作和格...
JavaScript JSON.parse 教程展示了如何将 JSON 字符串解析为 JavaScript 对象。 JSON JSON(JavaScript 对象显示法) 是一种轻量级数据交换格...
在本教程中,我们展示了如何在 JavaScript 中创建和使用模块。 模块 是 JavaScript 代码的容器。模块在单独的文件中定义。模块的目的是组织和隔离代码。 JavaScript 多...