NodeJs之Socket开发
来源:互联网 发布:网络推广有哪些方式 编辑:程序博客网 时间:2024/05/16 07:58
我们用Telnet向指定端口发送socket指令
首先讲下telnet的语法
telnet [ip] [port]
举例:
telnet localhost 3000
按Ctrl+]键从 Telnet 会话模式转换到 Telnet 命令模式
send /who
nodejs Socket实例:
var net = require('net');var sockets = [];var name_map = new Array();var chuck_quotes = [ "There used to be a street named after Chuck Norris, but it was changed because nobody crosses Chuck Norris and lives.", "Chuck Norris died 20 years ago, Death just hasn't built up the courage to tell him yet.", "Chuck Norris has already been to Mars; that's why there are no signs of life.", "Some magicians can walk on water, Chuck Norris can swim through land.", "Chuck Norris and Superman once fought each other on a bet. The loser had to start wearing his underwear on the outside of his pants."]function get_username(socket) { var name = socket.remoteAddress; for (var k in name_map) { if (name_map[k] == socket) { name = k; } } return name;}function delete_user(socket) { var old_name = get_username(socket); if (old_name != null) { delete(name_map[old_name]); }}function send_to_all(message, from_socket, ignore_header) { username = get_username(from_socket); for (var i=0; i < sockets.length; i++ ) { if (from_socket != sockets[i]) { if (ignore_header) { send_to_socket(sockets[i], message); } else { send_to_socket(sockets[i], username + ': ' + message); } } }}function send_to_socket(socket, message) { socket.write(message + '\n');}function execute_command(socket, command, args) {console.log("command:"+command); if (command == 'identify') { delete_user(socket); name = args.split(' ', 1)[0]; name_map[name] = socket; } if (command == 'me') { name = get_username(socket); send_to_all('**' + name + '** ' + args, socket, true); } if (command == 'chuck') { var i = Math.floor(Math.random() * chuck_quotes.length); send_to_all(chuck_quotes[i], socket, true); } if (command == 'who') {console.log("kkk"); send_to_socket(socket, 'Identified users:'); for (var name in name_map) { send_to_socket(socket, '- ' + name); } }}function send_private_message(socket, recipient_name, message) { to_socket = name_map[recipient_name]; if (! to_socket) { send_to_socket(socket, recipient_name + ' is not a valid user'); return; } send_to_socket(to_socket, '[ DM ' + get_username(socket) + ' ]: ' + message);}var s = net.Server(function(socket) { sockets.push(socket); socket.on('data', function(d) { data = d.toString('utf8').trim();//console.log(data); // check if it is a command var cmd_re = /^\/([a-z]+)[ ]*(.*)/g; var dm_re = /^@([a-z]+)[ ]+(.*)/g; cmd_match = cmd_re.exec(data)console.log(data); dm_match = dm_re.exec(data) if (cmd_match) { var command = cmd_match[1]; var args = cmd_match[2]; execute_command(socket, command, args); } // check if it is a direct message else if (dm_match) { var recipient = dm_match[1]; var message = dm_match[2]; send_private_message(socket, recipient, message); } // if none of the above, send to all else { send_to_all(data, socket); }; }); socket.on('close', function() { sockets.splice(sockets.indexOf(socket), 1); delete_user(socket); });});s.listen(3000);
执行结果:
Telnet 命令
Telnet 命令允许您与使用 Telnet 协议的远程计算机通讯。运行 Telnet 时可不使用参数,以便输入由 Telnet 提示符 (Microsoft Telnet>) 表明的 Telnet 上下文。可从 Telnet 提示符下,使用 Telnet 命令管理运行 Telnet 客户端的计算机。
Telnet 客户端命令提示符接受以下命令:
命令 描述
open
使用 openhostname 可以建立到主机的 Telnet 连接。
close
使用命令 close 命令可以关闭现有的 Telnet 连接。
display
使用 display 命令可以查看 Telnet 客户端的当前设置。
send
使用 send 命令可以向 Telnet 服务器发送命令。支持以下命令:
ao
放弃输出命令。
ayt
“Are you there”命令。
esc
发送当前的转义字符。
ip
中断进程命令。
synch
执行 Telnet 同步操作。
brk
发送信号。
上表所列命令以外的其他命令都将以字符串的形式发送至 Telnet 服务器。例如,sendabcd 将发送字符串 abcd 至 Telnet 服务器,这样,Telnet 会话窗口中将出现该字符串。
quit
使用 quit 命令可以退出 Telnet 客户端。
set
使用带有下列参数之一的 set 命令为当前会话配置 Telnet 客户端。
bsasdel
Backspace 将作为删除而发送。
codeset option
只有当语言设置为日语时才可用。将当前代码集设置为选项,可以为下列选项之一:
? Shift JIS
? Japanese EUC
? JIS Kanji
? JIS Kanji (78)
? DEC Kanji
? NEC Kanji
应该在远程计算机上设置相同的代码集。默认情况下,Telnet 客户端使用光栅字体。使用这些代码集访问远程计算机之前,您必须配置 Telnet 客户端以使用 TrueType 字体,从而确保正确地显示字符。
crlf
新行模式:导致 Return 键发送 0x0D, 0x0A。
delasbs
Delete 将作为退格键发送。
escapecharacter
从 Telnet 会话模式转换到 Telnet 命令模式。当处于 Telnet 命令模式时,按 Enter 将会返回到 Telnet 会话模式。
localecho
打开 localecho。
logfilename
指定为该会话将 Telnet 日志写入到的文件的名称。如果不指定该文件的路径,将在当前目录中创建文件。指定日志文件还会启动日志记录。
logging
启动该会话的日志。
mode {console | stream}
操作的模式。
ntlm
启动 NTLM 身份验证。
term {ansi | vt100 | vt52 | vtnt}
您希望 Telnet Client 模拟的终端的类型。
?
显示 set 的帮助信息。
unset
使用 unset 命令可以关闭先前使用 set 命令设置的选项。
status
使用 status 命令可以确定运行 Telnet 客户端的计算机是否已成功连接。
?/help
显示“帮助”信息。
FTP:文件传输协议。先说说他的功能吧,主要就是从运行FTP服务器的计算机传输文件。可以交互使用。这里要注意,只有安装了tcp/ip协议的机器才能使用ftp命令。
命令格式:ftp [-v][-d][-i][-n][-g][-s:filename][-a][-w:windowsize][computer]
说说他们的含义吧。
-v 不显示远程服务器响应
-n 禁止第一次连接的时候自动登陆
-i 在多个文件传输期间关闭交互提示
-d 允许调试、显示客户机和服务器之间传递的全部ftp命令
-g 不允许使用文件名通配符,文件名通配符的意思是说允许在本地文件以及路径名中使用通配字符
-s:filename 指定包含ftp命令的文本文件。在ftp命令启动后将自动运行这些命令。在加的参数里不能有空格。
-a 绑定数据连接时,使用任何的本地端口
-w:windowsize 忽略默认的4096传输缓冲区
computer 指定要连接的远程计算机的ip地址
- NodeJs之Socket开发
- nodeJS 之 socket.io
- nodejs之socket.io模块
- Nodejs开发之接口
- Nodejs开发Socket.IO聊天室0821
- Nodejs入门学习,nodejs web开发入门,npm、express、socket配置安装、nodejs聊天室开发
- android之Socket 开发
- Java之Socket开发
- iOS开发之Socket
- NodeJs之MyWeb框架开发介绍
- 《Nodejs开发加密货币》之十八:地址
- NodeJs开发环境之Sublime Text3
- nodejs开发指南之快速入门
- nodejs开发指南之核心模块
- nodejs之cordova 跨平台开发
- NodeJs之TypeScript开发环境--VS Code
- .NET Socket开发之异步Socket
- .NET Socket开发之异步Socket
- VI使用
- 去除数组中重复数字问题
- S3C6410中断控制详解--转
- 翻译方式:编译型,解释型
- java process
- NodeJs之Socket开发
- 洗牌算法
- curl请求页面
- action 中的sql拼装
- 惠普
- 卸载symantec AntiVirus Client客户端,要求输入密码。。。。
- 判断单链表是否有环
- jqgrid使用:常用属性用法和含义
- linux 压缩,打包命令