nodejs 实现套接字服务
- //第一种方法,通过一个options参数
- var SocketClient = net.connect(options, [connectionListener]);
- var SocketClient = net.createConnection(options, [connectionListener]);
- //第二种方法,通过接受port和host值作为直接的参数
- var SocketClient = net.connect(port, [host], [connectionListener]);
- var SocketClient = net.createConnection(port, [host], [connectionListener]);
- //第三种方法,通过接受指定文件系统位置的path参数,这个位置是一个Unix套接字在创建Socket对象时使用的。
- var SocketClient = net.connect(path, [connectionListener]);
- var SocketClient = net.createConnection(path, [connectionListener]);
- var net = require('net');
- var HOST = '127.0.0.1';
- var PORT = 6969;
- // 创建一个TCP服务器实例,调用listen函数开始监听指定端口
- // 传入net.createServer()的回调函数将作为”connection“事件的处理函数
- // 在每一个“connection”事件中,该回调函数接收到的socket对象是唯一的
- net.createServer(function(sock) {
- // 我们获得一个连接 - 该连接自动关联一个socket对象
- console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort);
- // 为这个socket实例添加一个"data"事件处理函数
- sock.on('data', function(data) {
- console.log('DATA ' + sock.remoteAddress + ': ' + data);
- // 回发该数据,客户端将收到来自服务端的数据
- sock.write('You said "' + data + '"');
- });
- // 为这个socket实例添加一个"close"事件处理函数
- sock.on('close', function(data) {
- console.log('CLOSED: ' +
- sock.remoteAddress + ' ' + sock.remotePort);
- });
- }).listen(PORT, HOST);
- console.log('Server listening on ' + HOST +':'+ PORT);
- var server = net.createServer();
- server.listen(PORT, HOST);
- console.log('Server listening on ' +
- server.address().address + ':' + server.address().port);
- server.on('connection', function(sock) {
- console.log('CONNECTED: ' +
- sock.remoteAddress +':'+ sock.remotePort);
- // 其它内容与前例相同
- });
- var net = require('net');
- var HOST = '127.0.0.1';
- var PORT = 6969;
- var client = new net.Socket();
- client.connect(PORT, HOST, function() {
- console.log('CONNECTED TO: ' + HOST + ':' + PORT);
- // 建立连接后立即向服务器发送数据,服务器将收到这些数据
- client.write('I am Chuck Norris!');
- });
- // 为客户端添加“data”事件处理函数
- // data是服务器发回的数据
- client.on('data', function(data) {
- console.log('DATA: ' + data);
- // 完全关闭连接
- client.destroy();
- });
- // 为客户端添加“close”事件处理函数
- client.on('close', function() {
- console.log('Connection closed');
- });
- var net=require('net');
- function getConnection(connName){
- var client=net.connect({port:8017,host:'127.0.0.1'},function(){
- console.log(connName+' connected: ');
- console.log(' local=%s:%s',this.localAddress,this.localPort);
- console.log( ' remote=%s:%s',this.remoteAddress,this.remotePort);
- this.setTimeout(500);
- this.setEncoding('utf8');
- this.on('data',function(data){
- console.log(connName+' From Server: '+data.toString());
- this.end();
- });
- this.on('end',function(){
- console.log(connName+' Client disnected');
- });
- this.on('error',function(err){
- console.log('Socket Error: ',JSON.stringify(err));
- });
- this.on('timeout',function(){
- console.log('Socket Time Out');
- });
- this.on('close',function(){
- console.log('Socket Closed');
- });
- });
- return client;
- }
- function writeData(socket,data){
- var success=!socket.write(data);
- if(!success){
- (function (socket,data){
- socket.once('drain',function(){
- writeData(socket,data);
- });
- })(socket,data);
- }
- }
- var example1=getConnection('example1');
- var example2=getConnection('example2');
- writeData(example1,'This is example1');
- writeData(example2,'This is example2');
- var server=net.createServer(function(client){
- console.log('Client connection: ');
- console.log(' local=%s:%s',client.localAddress,client.localPort);
- console.log( ' remote=%s:%s',client.remoteAddress,client.remotePort);
- client.setTimeout(500);
- client.setEncoding('utf8');
- client.on('data',function(data){
- console.log('Received data from client on port %d:%s',client.remotePort,data.toString());
- console.log(' Bytes received:'+data.toString());
- writeData(client,'Sending: '+data.toString());
- console.log(' Bytes sent: '+client.bytesWritten)
- });
- client.on('end',function(){
- console.log('Client disconnected');
- server.getConnections(function(err,count){
- console.log('Remaining Connections: '+count);
- });
- });
- client.on('error',function(err){
- console.log('Socket Error: '+JSON.stringify(err));
- });
- client.on('timeout',function(){
- console.log('Socket Time Out');
- });
- });
- server.listen(8017,function(){
- console.log('Server listening: '+JSON.stringify(server.address()));
- server.on('close',function(){
- console.log('Server Terminated');
- });
- server.on('error',function(err){
- console.log('Server Error: ',JSON.stringify(err));
- });
- });

nodejs 实现套接字服务的更多相关文章
- 通过开启子进程的方式实现套接字服务端可以并发的处理多个链接以及通讯循环(用到了subprocess模块,解决粘包问题)
今日作业:通过开启子进程的方式实现套接字服务端可以并发的处理多个链接以及通讯循环(用到了subprocess模块,解决粘包问题) server(服务端) import socket from mult ...
- Node.js中实现套接字服务
后端服务的一个重要的部分是通过套接字进行通信的能力. 套接字允许一个进程通过一个IP地址和端口与另一个进程通信 同一个服务器上的两个不同进程的进程间通信(IPC)或者访问一个完全不同 的服务器上运行的 ...
- 5-tcp套接字服务端编程
import socket 1.创建套接字 sockfd= socket.socket(socket_family = AF_INIT,socket_type=SOCK_STREAM,proto) 功 ...
- DotNet:Socket Server 异步套接字服务端实现
异步服务器套接字示例 From https://msdn.microsoft.com/zh-cn/library/fx6588te(v=vs.110).aspx 下面的示例程序创建接收来自客户端的连接 ...
- TCP下的套接字服务端实现并发 作业题
# 服务端 import socket from threading import Thread """ 服务端 1.要有固定的IP和PORT 2.24小时不间断提供服务 ...
- python通过套接字来发送接收消息
案例如下: 1.启动一个服务端套接字服务 2.启动一个客户端套接字服务 3.客户端向服务端发送一个hello,服务端则回复一个word,并打印 参考地址:https://www.cnblogs.com ...
- Python之路(第三十二篇) 网络编程:udp套接字、简单文件传输
一.UDP套接字 服务端 # udp是无链接的,先启动哪一端都不会报错 # udp没有链接,与tcp相比没有链接循环,只有通讯循环 server = socket.socket(socket.AF_I ...
- Learning-Python【28】:基于TCP协议通信的套接字
什么是 Socket Socket 是应用层与 TCP/IP 协议通信的中间软件抽象层,它是一组接口.在设计模式中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在 Sock ...
- day37协程与线程套接字通讯
协程与线程套接字通讯基于多线程实现套接字服务端支持并发,服务端 from socket import * from threading import Thread def comunicate(con ...
随机推荐
- .net mvc 路由
Asp.net Mvc之Action如何传多个参数 在Global.asax文件中,默认路由如下. routes.MapRoute( "Default", // 路由名称 &quo ...
- redis安装和简介(1)
一.Redis 简介 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: R ...
- Spring知识概括梳理
1. Spring 容器 http://blog.csdn.net/chenssy/article/details/8188570 2. Spring 注解 1)@Autowired http://b ...
- kafka 参数配置 1
kafka 参数配置 #参数配置 * broker.id : kafka 集群的唯一,标识每个broker * log.dirs : 指定kafka持久化消息的目录,可以设置多个目录,如:/home/ ...
- Vue教程:指令与事件(二)
一.插值 v-once 通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新.但请留心这会影响到该节点上所有的数据绑定: span v-once>这个将不会改 ...
- Google Performance工具,你还不会用?Git走起。
2018俄罗斯世界杯如火如荼的进行中,第一轮各种冷门,让大家的确大跌眼界,尤其是那些买球的同志们,慌得一笔,还敢继续买吗?话说来,看球归看球,学习还是不能落下,我们来学习Chrome Devtool ...
- 小程序内嵌H5——判断小程序环境的坑
现在各种小程序风靡,这边H5的需求还没有搞定,产品又要求做小程序版本,做可以,关键是618前上线,我-- whatever,618要做推广,日期订了,剩下的就只能是排期,定方案,尽可能完成. 最后和产 ...
- Oracle中插入千万条测试数据
测试需求,id.姓名.邮箱.手机号不可重复 1.创建序列 create sequence id_sequence; //创建序列id_sequence 2.创建表 create table USERI ...
- Redis笔记 -- 在 Centos7.4单机中部署Redis集群(二)
0x00--背景和目的 在单台PC服务器上部署Redis集群,通过不同的TCP端口启动多实例,模拟多台独立PC组成集群. 0x01--环境描述: Centos版本:CentOS Linux relea ...
- python 变量定义
变量定义 什么是变量? 在程序运行过程中,其值可以改变的量. 标识符(命令规范) 只能由数字.字母.下划线组成 不能以数字开头 不能是系统关键字 import keyword # 打印关键字列表 ...