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 ...
随机推荐
- BZOJ3196:二逼平衡树(线段树套Splay)
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在 ...
- tmux分屏
网上很多教程: 新手教程: tmux进入 ctrl + b 命令 % 纵向分屏 命令 方向键 切换 https://lukaszwrobel.pl/blog/tmux-tutorial-split-t ...
- 总结PHP删除字符串最后一个字符的三种方法
一.前言 从数据库中select()读取一对多的信息时,经常需要将取出的数组用某个特定的字符分割,然后拼接成字符串. 常见的语法格式: foreach ($arr as $key => $val ...
- shiro权限配置的细节问题&认证
细节: ---[urls]部分配置,其格式是 url=拦截器[参数] ,拦截器[参数] ---如果当前请求的 url 匹配 [urls] 部分或者某个url模式,将会执行配置的拦截器 ---an ...
- ssh启动失败
调试了两个小时.ssh启动不了. service ssh start /etc/init.d/ssh start 都尝试了,还是没法启动. [ 是否启动,可以命令行: ps -s | grep ssh ...
- MVC学习十:MVC 特性作用和MVC 验证
根据代码分析特性用处 [DisplayName("学员名")] [DataType(DataType.Text)] [StringLength(,ErrorMessage=&quo ...
- 分享一个可下拉刷新的ScrollView
原理:就是动态改变ScrollView header的margin实现 主要的代码: http://blog.csdn.net/swust_chenpeng/article/details/39289 ...
- Google 和 Baidu 常用的搜索技巧
Google 常用的搜索技巧 1. 精确搜索:双引号 精确搜索,就是在你要搜索的词上,加上双引号,这个Google搜索引擎,就会完全的匹配你所要的词 2. 站内搜索:site 这是一个比较常用的搜索方 ...
- 汇编中PSP是什么?为什么一般cs比ds大10h
一般来说,PSP是256个字节,当程度生成了可执行文件以后,在执行的时候,先将程序调入内存, 这个时候DS中存入程序在内存中的段地址,紧接着是程序的一些说明,比如说程序占用多大空间等 等,这就是PSP ...
- 20181030noip模拟赛T1
YY的矩阵 YY有一个大矩阵(N*M), 矩阵的每个格子里都有一个整数权值W[i,j](1<=i<=M,1<=j<=N) 对于这个矩阵YY会有P次询问,每次询问这个大矩阵的一个 ...