JavaScript socket

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

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

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

JS 套接字 HEAD 请求

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

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 命令发出头请求,后跟资源 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 的请求应该只检索数据。

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号端口预留给当日服务的报价。

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 socket发送邮件

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

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 套接字回显服务器

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

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 中的套接字。

列出 JavaScript 教程。

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏