1、什么是一个socket?

网络上两个程序通过一个双向的通信连接实现数据交换,这个连接的一端称为socket


2、http与socket的区别

在以前我们实现数据交换已经有了HTTP协议,为什么还要学习socket?
 
回顾当输出www.baidu.com的时候浏览器执行了那些操作?
 
 
http通信的特点:
    1、连接属于非持久性连接:TCP的三次握手
 
    2、客户端只能访问服务端,服务端无法访问客户端,属于单项通信
 
 
 
TCP三次握手:
    TCP三次握手过程中不传递数据,只为同步连接双方的序列号和确认号传递数据,在握手后服务端和客户端才开始传输数据,在理想状态下,TCP连接一旦建立,在通信的双方中任何一方主动断开连接之前TCP连接会一直保持下去。
 
 
socket通信特点:
    1、持久性连接
 
    2、双向通信,客户端能访问服务端,服务端也能访问客户端
 
 
socket是对TCP/IP协议的封装,socket只是一个接口而不是一个协议,通过Socket我们才能使用TCP/IP/UDP协议

 
3、socket原理
 
socket连接需要由2个节点:(1)clientSocket (2)serverSocket 

4、基于node中net模块实现socket

1、服务端

001、引入net模块

const net = require("net");

002、创建服务器

const server = net.createServer()

003、绑定端口号

server.listen(8888);

004、接受客户端的连接请求

//因为要实现多人聊天,因此需要用一个数据将所有用户存起来
let clients = []; server.on("connection",(client)=>{
//给每一个用户设定一个ID
client.id = clients.length; //将用户存入数据中
clients.push(client) //客户端向服务器发送数据转码
client.setEnCoding("utf8"); //监听用户向服务器发送数据,如果当前用户向服务器发送了数据那么服务器在将这个数据发送给所有用户
client.on("data",(data)=>{
for(var i=0;i<clients.length;i++){
if(clients[i]){
clients[i].send(data)
}
}
}) //监听用户是否退出群聊
client.on("close",()=>{
clients[client.id] = null;
}) //监听服务器是否出错 client.on("error",()=>{
clients[client.id] = null;
})
}) 2、客户端 001、引入net模块 const net = require("net"); //实例化客户端
const client = new net.socket(); 002、连接服务器
client.connect(8888,"127.0.0.1"); 003、监听来自服务器端的消息
client.on("data",(data)=>{
console.log("来自服务器端的消息"+data)
}) 004、向服务器发送消息 client.write("你好我是客户端")

客户端

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

【node】---socket---网络通信---【巷子】的更多相关文章

  1. Socket 网络通信

    Socket 网络通信 1.OSI (Open System Interconnect Reference Model)(开放系统互联参考模型) 从下低到高 :物理层.数据链路层.网络层.传输层.会话 ...

  2. node socket :10106无法加载或初始化请求的服务提供程序

    node socket :10106无法加载或初始化请求的服务提供程序 无端端的,不知道怎么回事,node突然就坏掉 了,应该是某些配置无意中改动了,问题如下: 目前能想到的解决办法就是:重置配置,用 ...

  3. Socket网络通信之NIO

    Socket网络通信之NIO NIO:new io ,java1.4开始推出的可非阻塞IO. java.nio 包,可解决BIO阻塞的不足 但比BIO学习.使用复杂. 可以以阻塞.非阻塞两种方式工作. ...

  4. Socket网络通信之BIO

    Socket网络通信之BIO 如果要让两台计算机实现通信,需要的条件:ip,port,协议. 目前我们用的最多的就是TCP/IP协议和UDP协议.TCP三次握手,所以比较慢,且安全:UDP速度快,但是 ...

  5. socket网络通信

    1.socket通常也称作"套接字",用于描述IP地址和端口.在internet上的主机一般运行了多个服务软件,同时提供几种服务,每种服务都打开一个socket,并绑定到一个端口上 ...

  6. node socket.io web

    soket.io & web http://socket.io/get-started/chat/ 新建一個文件夾 soketWeb ; 在sokertWeb 文件夾內新建一個 package ...

  7. java实现最基础的socket网络通信

    一.网络通信基础 网络中存在很多的通信实体,每一个通信实体都有一个标识符就是IP地址. 而现实中每一个网络实体可以和多个通信程序同时进行网络通信,这就需要使用端口号进行区分. 二.java中的基本网络 ...

  8. Socket网络通信编程(二)

    1.Netty初步 2.HelloWorld 3.Netty核心技术之(TCP拆包和粘包问题) 4.Netty核心技术之(编解码技术) 5.Netty的UDP实现 6.Netty的WebSocket实 ...

  9. TCP/UDP,SOCKET网络通信,C++/Java实现

    趁这两天没事干,就把网络通信这一块搞一搞,C/S方面的了解一下,很重要! TCP Server/Client

  10. UDP SOCKET网络通信 C#

    接收端 using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Thread ...

随机推荐

  1. 【转载】C#进阶系列——动态Lamada

    前言:在DDD系列文章里面,我们在后台仓储里面封装了传递Lamada表达式的通用方法,类似这样: public virtual IQueryable<TEntity> Find(Expre ...

  2. C#中的程序集和命名空间

    C#中的程序集和命名空间 如果说命名空间是类库的逻辑组织形式,那么程序集就是类库的物理组织形式.只有同时指定类型所在的命名空间及实现该类型的程序集,才能完全限定该类型.<精通.NET核心技术-- ...

  3. 前台的js对象数组传到后台处理。在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>

    前台的js对象数组传到后台处理.在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>

  4. mysql 异常 Lock wait timeout exceeded; try restarting transaction;expc=java.sql.SQLExcept

    这种一般是等锁超时了,可以设置延长等锁时间. mysql> set innodb_lock_wait_timeout=100 Query OK, 0 rows affected (0.02 se ...

  5. protobuf语法

    是什么? 目前市面上的unity手游开发主流数据通讯协议的解决方案.protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传 ...

  6. Blender之OBJ转json

    要想从 Blender 中导出 Three. 模型, 我们首先要将 Tbree.js 导出器添加到Blender 中. 你可以从www.blender.org 上下载 Blender,然后按照相应平台 ...

  7. TTCN中PTC的执行流程

    一些概念 Component(測试组件或者測试成分),TTCN接触下来最频繁的就是MTC(Main Test Component,主測试组件),在执行測试用例前,须要首先创建一个MTC.在testca ...

  8. 深入volley(三)自己来写volley

    https://github.com/Smalinuxer/android-SpillOver 这是我自己写的一个请求缓存框架,基于volley的,沿袭了volley的架构与设计思想,而对其进一步的封 ...

  9. Java精选笔记_EL表达式

    EL表达式 初始EL EL是一种可以简化JSP页面的表达式,EL表达式的语法非常简单都是以"${"符号开始,以"}"符号结束的 EL表达式是一种简单的数据&qu ...

  10. js实现卡号每四位空格分隔

    window.onload =function() { document.getElementById("input_num").oninput =function() { })( ...