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("你好我是客户端")

客户端

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

最新文章

  1. KEIL中启动文件详解(汇编语言)
  2. Android项目编译和使用C语言动态库(so库)
  3. BZOJ3925: [Zjoi2015]地震后的幻想乡
  4. django学习の模型
  5. selenium python (七)层级定位(二次定位)
  6. 在Kafka中修改Topic的preferred replica
  7. jquery easyui datagrid 分页 详解
  8. Asp.net SqlDataReader转成Datatable
  9. poj Minimum( CutStoer Wagner算法)
  10. lodash 实现一些常见的功能
  11. python判断两个文件是否相同
  12. TensorFlow.js入门(一)一维向量的学习
  13. 唯一索引的一种使用情景【有则U无则I】
  14. Photoshop影像匀色技术
  15. Simple scatter method in 2d picture(Qt)
  16. 在function module 中向数据库插入数据
  17. Spring5源码解析-Spring框架中的单例和原型bean
  18. 扩展方法(深入理解c#)
  19. 2017-2018-2 20165233 实验四 Android程序设计
  20. Session的存储原理

热门文章

  1. ti的硬件时钟和系统时钟同步
  2. [转]Git学习笔记与IntelliJ IDEA整合
  3. 文件名中含有连续字符abc,相应文件中也含有字符串abc
  4. iotop详解
  5. Loadrunner中socket协议中的三个关联函数
  6. 【Graphlab】
  7. Jquery实现上下移动和排序代码
  8. Java任务调度开源框架quartz学习
  9. 落实制度靠流程&lt;摘自平安50万人的执行力&gt;
  10. Nginx伪静态配置和常用Rewrite伪静态规则集锦