iNet

深入浅出讲解:php的socket通信 转

我是研究僧i 提交于 2020-04-23 14:32:33
对 TCP/IP、 UDP、 Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问: 1. 什么是 TCP/IP、 UDP? 2. Socket在哪里呢? 3. Socket是什么呢? 4. 你会使用它们吗? 什么是 TCP/IP 、 UDP ? TCP/IP( Transmission Control Protocol/Internet Protocol)即传输控制协议 /网间协议,是一个工业标准的协议集,它是为广域网( WANs)设计的。 UDP( User Data Protocol,用户数据报协议)是与 TCP相对应的协议。它是属于 TCP/IP协议族中的一种。 这里有一张图,表明了这些协议的关系。   TCP/IP协议族包括运输层、网络层、链路层。现在你知道TCP/IP与UDP的关系了吧。 Socket在哪里呢?   在图1中,我们没有看到Socket的影子,那么它到底在哪里呢?还是用图来说话,一目了然。 原来Socket在这里。 Socket是什么呢?   Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP /IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 你会使用它们吗

Onvif第四课 服务器端发现实现

北城余情 提交于 2020-04-23 05:51:21
场景 需要开发一个服务器发现模块,等待客户端的探测报文。在Linux服务器下组播地址imr_interface可以不绑定 mcast.imr_multiaddr.s_addr = inet_addr("239.255.255.250"); mcast.imr_interface.s_addr = htonl(INADDR_ANY); 但是在windwos服务器下必须绑定一个指定的IP地址,否则无法收到任何的组播探测包 具体代码 //加入设备组,设备发现 DWORD WINAPI OnvifBeDiscovered(LPVOID p) { struct soap UDPserverSoap; struct ip_mreq mcast; soap_init1(&UDPserverSoap, SOAP_IO_UDP | SOAP_XML_IGNORENS); soap_set_namespaces(&UDPserverSoap, namespaces); SOAP_SOCKET localSocket = soap_bind(&UDPserverSoap, NULL, 3702, 10); if (!soap_valid_socket(localSocket)) { soap_print_fault(&UDPserverSoap, stderr); exit(1); } mcast

构建CDN分发网络架构

杀马特。学长 韩版系。学妹 提交于 2020-04-21 23:39:19
1.问题:   合创科技为企业网站注册了域名 www.mvsc.com,部署了2台 Nginx 网站服务器。为了提高此站点服务不同地区用户时的响应速度,合创科技向蓝讯公司购买了 CDN 缓存服务。根据缓存分发需要,合创科技向域名注册商新网申请更改解析记录,以 CNAME 别名的方式转交给蓝讯的 DNS 服务器处理。而蓝讯公司负责识别 Web 用户的来源地址,并通过最近的 CDN 缓存节点向用户分发网页内容。   为提高 Web 站点的访问速度,要求实现以下目标:     -  通过本地 cache 缓存,提高用户访问 Web 的速度及稳定性     -  消除地域及运营商之间的网络互联影响,客户端永远选择离自己最近的服务器获取资源     -  减轻后端源站站点 Web 服务器的负载压力     -  有效预防和降低 DDOS 攻击 2.方案:   根据需求中描述的网络架构,可以采用 Squid 反向代理、DNS 智能解析相结合的方式来实现 CDN 内容分发网络,如图-1 所示。                 图-1   其中涉及到10台服务器:     -  DNS 服务器 - 域名注册商(新网):172.16.0.111/24,dns111.xinnet.com     -  DNS 服务器 - CDN 服务商(蓝讯):172.16.0.222/24,dns222.lxcdn

[LINUX-06]linux网络编程(完整版)

冷暖自知 提交于 2020-04-21 23:26:07
之间在网上看到很多网络编程都是一个一个demo,今天我把之前学到的汇总起来,希望大家可以进行补充。 我理解的网络通信分为4种 1,udp客户端 2,udp服务端 3,tcp客户端 4,tcp服务端 线程中我使用过两种方式编程,一种是经典函数式编程加上标志位,如下: while ( 1 ) { server_init(); client_init(); sock_send(); select_handler(); } 其中各函数里面放置了大量的标志位,如下: void client_init( void ) { // 确认客户端初始化标志位 // } void sock_send( void ) { // 判断客户端标志位,成功则继续进行 if (client_init_flag) { // 发送操作 // 确认客户端发送标志位 } } void select_handler( void ) { if (send_flag) { // 处理数据并接受可以用select } } 这种方式,我觉得在看代码的时候很乱,但是他在大量的通信时还比较友好,可以建立一个结构体数组,每个数组成员代表一个客户端,结构体放置client_init_flag和send_flag。 还有一种方式采用的是状态机编程 创建枚举 typedef enum client_statues_t { init_flag

基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(二)

雨燕双飞 提交于 2020-04-21 06:00:43
作品已经完成,先上源码: https://files.cnblogs.com/files/qzrzq1/WIFISpeaker.zip 全文包含三篇,这是第二篇,主要讲述发送端程序的原理和过程。 第一篇: 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(一) 第三篇: 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(三) 以下是正文:   发送端程序基于MFC的对话框类实现,开发环境Visual Studio 2012,主要实现了5个功能,下面逐个讲述:   1、软件启动检查互斥体,防止程序重复启动。   2、读取上一次启动的配置文件,初始化socket、获取本机ip地址。   3、读取用户输入的接收端IP地址,利用Core Audio APIs初始化loopback(环回录音)模式,启动录音子线程。   4、在子线程不断读取音频缓冲区数据,每0.1s将录制的数据打包以PCM格式,通过socket发送到接收端。   5、最小化到系统托盘 一、检查互斥体   创建互斥体是防止应用程序重复启动最常用的方式,本作品使用Core Audio APIs读取声卡音频数据,只能实例化一次。这是因为,这个作品完成后,作者在使用的过程中,发送端软件在运行一段时间后,总是不定期莫名其妙地出现“appcrash”错误,然后程序莫名崩溃

使用bloom 加速sqler + gitbase 的代码统计分析情况

僤鯓⒐⒋嵵緔 提交于 2020-04-19 15:49:06
我们基于gitbase 暴露的mysql 服务,可以方便的查询数据,但是如果需要长时间计算的就不太好了 还是我们可以通过bloom通过配置的方式就可以解决,以下是一个实践以及一些问题的解决访问 环境准备 docker-compose 文件 version: "3" services: lb: image: openresty / openresty: alpine volumes: - "./nginx-lb.conf:/usr/local/openresty/nginx/conf/nginx.conf" ports: - "9000:80" bloom: image: dalongrong / bloom: v1 .28.0 volumes: - "./bloom.cfg:/etc/bloom.cfg" ports: - "8811:8811" - "9001:8080" redis: image: redis ports: - "6379:6379" gitbase: container_name: gitbase hostname: gitbase image: srcd / gitbase: v0 .24.0 - rc2 volumes: - "./git-demos:/opt/repos" ports: - "3306:3306" sqler: image:

按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别

只愿长相守 提交于 2020-04-19 11:40:31
一.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。 Debian是三大发行版中唯一以社区形式运作,不以商业公司形式运作。是一个致力于创建自由操作系统的合作组织。而且debian开发者所创建的操作系统中绝大部分基础工具来自于GNU工程。 Fedore是一款基于linux的操作系统,也是一组维持计算机正常运行的软件集合。由红帽公司赞助。 suse是基于Slackware二次开发的一款Linux,主要用于商业桌面、服务器。 不同发行版之间的联系: 所有发行版都是使用Linux内核;都需要遵循GNU的GPL(General Public License)协定 不同发行版之间的区别: 发行版的本质区别,在于继承不同版本的内核,库、程序的组成。不同发行版几乎采用了不同包管理器(SLES、Fedora、openSUSE、centos、RHEL使用rmp包管理系统,包文件以RPM为扩展名;Ubuntu系列,Debian系列使用基于DPKG包管理系统,包文件以deb为扩展名。) 二. 安装Centos7.6操作系统,创建一个自己名字的用户名,并可以正常登录,将主要步骤截图。 三.配置环境变量,实现执行history的时候可以看到执行命令的时间。 1.在~/.bash_profile文件中新增一行,写入:HISTTIMEFORMAT="”%F %T ",保存退出。 [root

HA高可用keepalived

微笑、不失礼 提交于 2020-04-18 19:43:56
老男孩教育01期脱产班-day30-综合架构存储服务-NFS ================================================================================================ 00. 课程说明: 1) 负载均衡遗留知识点补充 2) 高可用服务的概念介绍 3) 部署安装高可用服务 4) 高可用服务配置文件参数说明 5) 高可用服务VRRP协议原理 6) 高可用服务常见问题(脑裂也叫裂脑文件) 7) 高可用服务如何进行监控 8) 高可用服务实现双主配置 01. 课程回顾: 1) LNMP 架构常见问题 a 如何实现WEB服务器和存储服务器建立关系 web+nfs 1) 找到网站数据存储的本地目录 2) 如果本地存储目录有数据,需要进行迁移备份 3) 编写查看nfs服务配置参数(xxx_squash) 4) 实现挂载操作(实现开机自动挂载) web+mysql 1) 将本地数据数据进行备份 mysqldump --all-database 2) 将备份数据进行迁移 3) 将数据进行还原 4) 修改代码文件,连接新的数据库服务 b 负载均衡概念说明 什么是集群 什么是负载 什么是反向代理 c 负载均衡集群架构部署 集群环境部署 负载均衡部署 upstream 模块 实现负载均衡 proxy_pass

C语言Socket编程(计算机网络作业)

青春壹個敷衍的年華 提交于 2020-04-18 12:23:22
最近我计算机网络课程要做作业了,没办法跟着老师一步一步的写C语言的代码,使用的计算就是Socket通信发送消息;代码实现的功能很简单,客户端向服务器端发送消息,服务器端接收客户端发来的消息,并且输出显示到屏幕上;代码中的每个socket方法的返回值都应该做判断出错情况,例如:创建SOCKET的创建的时候s句柄(或对象),需要判断返回值是否为INVALID_SOCKET,以及socket的所有操作的返回值是否为SOCKET_ERROR,以保证程序的稳定性,这里只是测试代码。 老师是录制的视频讲解的,其他其中使用的到的方法要求我们自己去查相关的MSDN资料库,如果有不懂的,就自己上网查。 服务器端接收代码: #include <Winsock2.h> #pragma comment(lib,"Ws2_32.lib") #include <stdio.h> #include <memory.h> void main() { WSAData wsd; WSAStartup(MAKEWORD(2,0),&wsd); SOCKET s =NULL; s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); struct sockaddr_in ch; memset(&ch,0,sizeof(ch)); ch.sin_family=AF_INET; ch.sin

深入探索 TCP TIME-WAIT

旧城冷巷雨未停 提交于 2020-04-18 06:48:26
1​ TIME-WAIT 状态 主动关闭连接的一方,在四次挥手最后一次发送 ACK 后,进入 TIME_WAIT 状态。在这个状态里,主动关闭连接一方等待 2MSL(Maximum Segment Life,报文段最大生存时间,在RFC793 中定义为 2 min,而在 Linux 中定义为 30s),若这段时间内未收到被动关闭一方重发的 FIN,则由 TIME_WAIT 状态转到 CLOSED 状态。 祭上状态机图: 在这里为了讨论方便,假设主动关闭连接的一方均为本地客户端,被动关闭连接的一方均为服务端,以客户端与服务端 TCP 状态的变化来讨论。 2​ 存在的目的 为什么 TCP 需要设置 TIME-WAIT 状态等待 2MSL 才能转到 CLOSED 状态关闭连接呢? ​2.1​ 避免在新连接上收到旧连接的数据 避免在同一四元组(源地址、源端口、目的地址、目的端口)上的新连接收到旧连接的数据。 如下图所示,服务端第一次发送的序号为 3 的数据包因延时未送达客户端,服务端重发第二次序号为 3 的数据包后客户端接收到并主动断开连接。 在很短时间内,客户端重新向服务端发起连接,这时服务端发送序号 1、序号 2 的数据给客户端,但同时客户端也收到了在网络上延时到达的服务端第一次发送的序号为 3 的数据包。 RFC793 中描述了 ISN 每 4 微秒会自增 1,达到 2^32 后又从