bind

常用socket函数详解

家住魔仙堡 提交于 2020-08-15 14:40:50
常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确。每次都查半天,经常烦恼于此。索性都弄得清楚、通透,并记录下来,一来便于自己记忆,再者以防日后查阅、回顾。 主要介绍:socket、bind、listen、connect、accept、send、sendto、recv、recvfrom、close、shutdown 网络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件。 其在linux和windows环境下的头文件主要是:#include<sys/socket.h>和#include<WinSock2.h> 下面较为详细的介绍各个函数的使用方法,及返回值判断和处理。另外,若想对函数调用后内核的详细动作过程,可参考UNIX网络编程第一卷或TCPIP详解第二卷。 1. socket intsocket(int domain,int type, int protocol) ________________________

CentOS 7 安装 bind 服务 实现内网DNS

狂风中的少年 提交于 2020-08-15 12:54:01
目录 安装 配置 服务管理 测试 安装 废话不多说,直接安装 yum install -y bind bind-utils 配置 [root@jenkins named]# rpm -ql bind /etc/logrotate.d/named /etc/named # 命令 /etc/named.conf # 主配置文件 /etc/named.iscdlv.key /etc/named.rfc1912.zones # 辅助配置文件 /etc/named.root.key /etc/rndc.conf /etc/rndc.key /etc/rwtab.d/named /etc/sysconfig/named /var/named 修改配置: [root@jenkins named]# vim /etc/named.conf options { listen-on port 53 { 127.0.0.1; 192.168.1.122; };# 监听本机IP的53端口 listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt";

JavaScript的call、apply、bind

此生再无相见时 提交于 2020-08-15 11:51:18
<script> // let a = { // name : "懒羊羊", // fn : function(){ // console.log(this.name); // } // } // let b = a.fn; // b.fn(); 为空 // call、apply的作用 // 1、执行函数;2、改变this指向 3、可以传参数 //call 传参:第一个参数是this的指向, //后面的参数都是 对应b函数的形参 // let a = { // name : "懒羊羊", // fn : function(){ // console.log(this.name); // } // } // let b = a.fn; // b.apply(a,["美美的","美羊羊"]); // let a1 = { // name : "fei羊羊", // fn : function(){ // console.log(this.name); // } // } // let b1 = a1.fn; // b1.apply(a1,["美美的","美羊羊"]); //3、bind //作用:可以改变this指向,2、可以传入参数,3、不可以执行函数,返回一个新函数 let a = { name : "懒羊羊", fn : function(adj, person){

frp 内网穿透工具设置

拥有回忆 提交于 2020-08-15 11:28:51
下载地址: https://github.com/fatedier/frp/releases 参考地址:https://github.com/fatedier/frp/blob/master/README_zh.md 服务端配置 # [common] is integral section [common] # A literal address or host name for IPv6 must be enclosed # in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80" bind_addr = 0.0.0.0 bind_port = 7000 # if you want to support virtual host, you must set the http port for listening (optional) vhost_http_port = 8080 vhost_https_port = 443 # if you want to configure or reload frps by dashboard, dashboard_port must be set dashboard_port = 7500 # dashboard user and

VUE 动态修改Video标签Src播放路径

て烟熏妆下的殇ゞ 提交于 2020-08-15 11:00:11
首先HTML,注意这里修改 bind绑定src 属性是不能生效的 我使用的是用JS 获取DOM节点,然后给DOM的Src属性赋值 < video id ="playVideos" controls width ="100%" height ="240" > < source id ="playVideosss" :src ="playVideoUrl" type ="video/mp4" > </ video > 修改src路径代码 playVideo(url){ let vdo = document.getElementById("playVideos" ) vdo.src = url; vdo.play(); }, 来源: oschina 链接: https://my.oschina.net/u/4340062/blog/4496613

基于TCP与UDP协议的socket通信

无人久伴 提交于 2020-08-15 10:55:15
基于TCP与UDP协议的socket通信 C/S架构与初识socket    在开始socket介绍之前,得先知道一个Client端/服务端架构,也就是 C/S 架构,互联网中处处充满了 C/S 架构(Client/Server),比如我们需要玩英雄联盟,就必须连接至英雄联盟的服务器上,那么对于我们玩家来说它的英雄联盟服务器就是Server端,而我们必须要有一个英雄联盟Client端才能够去和英雄联盟Server端进行数据交互。    互联网的协议实际上就是为了让计算机之间互相进行通信,只是按照功能不同分为了七层或者五层。这里再来回忆一下: TCP/IP五层网络模型介绍 层级 功能 应用层 跑应用协议的,如:HTTP,FTP等等,主要职责便是规定应用数据的格式。可以自定义协议,但是必须要有head部分与data部分。 传输层 跑端口协议的,如:TCP / UDP等等,主要职责便是用于区分该系统上的唯一一个网络应用程序。 网络层 IP地址子网掩码等等相关都在网络层,如:IP协议,主要职责便是用来区分广播域,防止网络风暴的发生。 数据链路层 划分电信号以及IP地址与MAC地址相互转换,如:以太网协议,ARP协议等等,用来区分电信号与支持通信的。 物理层 传输电信号,网络数据传输的基石。    计算机网络的核心就是一堆协议,想开发基于网络通信的软件就必须遵守这些协议

springboot 注册到nacos

走远了吗. 提交于 2020-08-15 10:34:17
springboot 版本 2.0.8.RELEASE <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.0.8.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> 参考文章: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html 是使用Nacos Spring Cloud方式配置的,为什么是不使用springboot ,因为springboot加代码,自己手动注册。 服务端用的是1.1.4,因为1.2.0要用户认证 1、配置 1.1添加依赖包 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>0.2.1.RELEASE</version> </dependency> 1.2添加文件bootstrap.properties,内容

Android接入阿里云短信服务最全解析(包含demo)

删除回忆录丶 提交于 2020-08-15 07:08:39
阿里云短信服务真是太坑了把 ,,,,,, 老铁们 我太难了 昨天接到需求需要将阿里云的短信服务接入到软件中进行登陆验证 我用的是阿里云的javaSDK,因为这里我用的是androidstudio所以我直接选择使用添加jar包的方式来继承(噩梦开始的地方) AndroidStudio添加jar包方式 找到我们的libs目录 将我们下载好的sdk复制到该目录下 然后在我们的gradle app中的Android中添加 sourceSets { main { jniLibs . srcDirs = [ 'libs' ] } } 这样我们的目录下就会显示 说明添加成功 添加依赖 点击ok然后我们的gradle中就会多一句依赖 就说明我们添加成功了 ok依赖添加完成 让我们来一步步实现短信功能 然后就是我们的测试代码块 首先是阿里云提供的代码块: 然后就是我们的代码块 DefaultProfile profile = DefaultProfile . getProfile ( "cn-hangzhou" , "<accessKeyId>" , "<accessSecret>" ) ; final IAcsClient client = new DefaultAcsClient ( profile ) ; //构建请求 final CommonRequest request = new

Spring Boot (十三): Spring Boot 整合 RabbitMQ

随声附和 提交于 2020-08-15 05:34:20
1. 前言 RabbitMQ 是一个消息队列,说到消息队列,大家可能多多少少有听过,它主要的功能是用来实现应用服务的异步与解耦,同时也能起到削峰填谷、消息分发的作用。(了解源码可+求求: 1791743380) 消息队列在比较主要的一个作用是用来做应用服务的解耦,消息从消息的生产者传递到消息队列,消费者从消息队列中获取消息并进行消费,生产者不需要管是谁在消费消息,消费者也无需关注消息是由谁来生产的。在分布式的系统中,消息队列也会被用在其他地方,比如分布式事务的支持,代表如阿里开源的 RocketMQ 。 当然,我们本篇文章的主角还是 RabbitMQ 。 2. RabbitMQ 介绍 RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。 AMQP,即 Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布

Java读源码之Netty深入剖析学习(一)

五迷三道 提交于 2020-08-15 04:16:12
Dubbo、Rocket MQ底层都是用了Netty应用框架 服务端: public class ServerBoot { private static final int PORT = 8000; public static void main(String[] args) { Server server = new Server(PORT); server.start(); } } public class Server { private ServerSocket serverSocket; public Server(int port) { try { this.serverSocket = new ServerSocket(port);//相当于服务器启动了,并且监听了端口号port System.out.println("服务端启动成功,端口:" + port); } catch (IOException exception) { System.out.println("服务端启动失败"); } } public void start() { new Thread(new Runnable() { @Override public void run() { doStart(); } }).start(); } private void doStart() { while