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. Spring 4 官方文档学习(十一)Web MVC 框架之Flash Attributes

    接上一篇中的重定向. http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-fl ...

  2. (转)live555从RTSP服务器读取数据到使用接收到的数据流程分析

    本文在linux环境下编译live555工程,并用cgdb调试工具对live555工程中的testProgs目录下的openRTSP的执行过程进行了跟踪分析,直到将从socket端读取视频数据并保存为 ...

  3. 修改Java标准库源码

    以下是摘抄,实际操作没有测试   先前我曾提到,原本想借由“改动Java标准库源码”来测知Class object的生成,但由于其ctor原始设计为private,也就是说不可能透过这个管道生成Cla ...

  4. (转载)UTF-8和GBK的编码方式的部分知识:重要

    GBK的文字编码是双字节来表示的,即不论中.英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1. 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节) ...

  5. 修改查看MYSQL字符集(charset)

    From: http://www.cnblogs.com/fengqingtao/archive/2010/11/23/1885220.html 查看mysql的字符集 mysql> show ...

  6. JavaSE(八)之Map总结

    上一篇是总结了Collection接口的各种实现类,这一篇我将分享的是Map的总结,希望大家点评! 一.Map接口 1.1.为什么Collection不能满足集合的所有功能? Collection接口 ...

  7. jQuery对象的链式操作用法分析

    可以使用下面的原则判断一个函数返回的时候是jQuery对象,即是否可以用于链式操作. 除了获取某些数据的函数,比如获取属性值"attr(name)",获取集合大小"siz ...

  8. c#.net常用函数和方法集

    1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.D ...

  9. catch(…) vs catch(CException *)?

    转自:https://stackoverflow.com/questions/7412185/what-is-the-difference-between-catch-vs-catchcexcepti ...

  10. VC++:Debug出错,提示错误在findfile.cpp (Line 369)

    调试程序的Debug版本,出现断言框,定位于库文件findfile.cpp 第369行: void CFileFind::AssertValid() const { // if you trip th ...