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 教程。