socket函数

socket编程为什么需要htonl(), ntohl(), ntohs(),htons() 函数-------转载

匿名 (未验证) 提交于 2019-12-03 00:39:02
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数。 网络字节顺序与本地字节顺序之间的转换函数: htonl()--"Host to Network Long" ntohl()--"Network to Host Long" htons()--"Host to Network Short" ntohs()--"Network to Host Short"   之所以需要这些函数是因为计算机数据表示存在两种字节顺序:NBO与HBO 网络字节顺序NBO(Network Byte Order): 主机字节顺序(HBO,Host Byte Order):    int main() { printf("%d \n",htons(16)); return 0; }   得到的结果是4096,初一看感觉很怪。 包含的头文件为:"winsock2.h"   原文地址: http://blog.chinaunix.net/uid-21278406-id-444362.html 原文:https://www.cnblogs.com/6-6-8-8/p/9264944.html

Glusterfs的rpc模块实现(第四部分)

匿名 (未验证) 提交于 2019-12-03 00:27:02
前面两个小节分别对rpc服务端和客户端的建立流程做了详细的分析,也就是说rpc客户端和服务器端已经能够进行正常的通信了(rpc客户端已经通过connect链接上rpc服务器了),那么这一小节主要根据一个实际的例子来分析一个完整的rpc通信过程。 下面以客户端创建逻辑卷(volume)为例来分析rpc的通信过程,就以下面这个客户端的命令开始: gluster volume create test-volume server3:/exp3 server4:/exp4 先简单看看glusterfs的客户端是怎样开始提交rpc请求的,提交准备过程流程图如下: 从上面的流程图可以看出真正开始提交 rpc 请求调用还是从具体命令的回调函数开始发起的,上面的流程图主要展示的是准备工作,下面从具体命令的回调函数开始分析,这里分析的实例是创建逻辑卷的命令,执行的函数是 cli_cmd_volume_create_cbk ,主要实现代码如下: 1 proc = &cli_rpc_prog->proctable[GLUSTER_CLI_CREATE_VOLUME]; // 从rpc程序表中选择对应函数 2 3 frame = create_frame (THIS, THIS->ctx->pool); // 创建帧 4 5 ret = cli_cmd_volume_create_parse (words,

libevent--bufferevent的使用与实现

匿名 (未验证) 提交于 2019-12-03 00:22:01
bufferevent简单介绍 一般通过libevent进行网络编程,都是将一个socket的fd与一个event进行绑定,并自行维护一个buffer用于存储从socket上接收的数据,同时可能也用于待发送数据的缓存。然后通过可读可写事件从socket上收取数据写入缓存并进行相应处理,或者将缓存中的数据通过socket发送。 libevent为这种带缓存的IO模式提供了一种通用的机制,那就是bufferevent。一个bufferevent包含了一个底层传输的fd(通常为socket),一个输入buffer和一个输出buffer,并且bufferevent已经帮我们完成了从socket上接收数据写入输入buffer,同时从输出buffer中取出数据通过socket发送,当输入输出缓存中的数据达到一定量时调用我们设置的回调函数。这样使得我们可以更加关注数据的处理。 bufferevent的简单使用 # include "stdio.h" # include "stdlib.h" # include "string.h" # include "arpa/inet.h" # include "event.h" //读回调处理 void read_callback (struct bufferevent * pBufEv, void * pArg) { //获取输入缓存 struct

程序员:利用Python实现可控制肉鸡的反向Shell

时光怂恿深爱的人放手 提交于 2019-12-02 23:50:40
一、初识 1.1 用 Python 实现一个可以管理多个肉鸡的反向 Shell,为什么叫反向 Shell 呢?反向就是肉鸡作为 Client 主动连接到我们的 Server 端,以实现对多个远程主机的管理! 学习技能: 了解TCP协议 了解C/S结构程序设计 Python socket模块的使用 Python subprocess模块的使用 1.2效果图 二、理论基础 以下内容整理自百度百科,参考链接: C/S结构 TCP(传输控制协议) 2.1 C/S结构程序设计 C/S 结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。 本次实验就是基于C/S结构的一个应用。很多有名的远程控制工具都是基于C/S结构开发的,比如:灰鸽子、冰河、teamViewer等等。但是我们应该将肉鸡端作为Server还是Client呢

Socket 编程介绍

谁说胖子不能爱 提交于 2019-12-02 22:52:57
Socket 编程发展 Linux Socket 编程领域,为了处理大量连接请求场景,需要使用非阻塞 I/O 和复用。select、poll 和 epoll 是 Linux API 提供的 I/O 复用方式,自从 Linux 2.6 中加入了 epoll 之后,高性能服务器领域得到广泛的应用,现在比较出名的 Nginx 就是使用 epoll 来实现 I/O 复用支持高并发,目前在高并发的场景下,Nginx 越来越收到欢迎。 据 w3techs 在 2015 年 8 月 10 日的统计数据表明,在全球 Top 1000 的网站中,有 43.7% 的网站在使用 Nginx,这使得 Nginx 超越了 Apache,成为了高流量网站最信任的 Web 服务器足足有两年时间。已经确定在使用 Nginx 的站点有:Wikipedia,WordPress,Reddit,Tumblr,Pinterest,Dropbox,Slideshare,Stackexchange 等,可以持续罗列好几个小时,他们太多了。 下图是统计数据: select 模型 下面是 select 函数接口: int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); <br> select

Python笔记(六)mini-web服务器

匿名 (未验证) 提交于 2019-12-02 22:51:30
一、正则表达式 1、re模块 # 导入re模块 import re # 使用match方法进行匹配操作 result = re.match(正则表达式,要匹配的字符串) # 如果上一步匹配到数据的话,可以使用group方法来提取数据 result.group() import re # 若没有返回值,说明匹配不成功 res = re.match(r"hell", "hello world") print(res) # 提取数据 print(res.group()) 2、匹配单个字符 字符 功能 . 匹配任意1个字符(除了\n) [ ] 匹配[ ]中列举的字符 \d 匹配数字,即0-9 \D 匹配非数字,即不是数字 \s 匹配空白,即 空格,tab键 \S 匹配非空白 \w 匹配单词字符,即a-z、A-Z、0-9、_ \W 匹配非单词字符 import re # \d匹配一位数字 res = re.match(r"速度与激情\d", "速度与激情1") print(res.group()) res = re.match(r"速度与激情[12345678]", "速度与激情9") print(res) res = re.match(r"速度与激情[1-8]", "速度与激情88") print(res.group()) res = re.match(r"速度与激情[1-36-8]",

python的socket模块

匿名 (未验证) 提交于 2019-12-02 22:51:30
sk.bind(address)   s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。 sk.listen(backlog)   开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。 sk.setblocking(bool)   是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。 sk.accept()   接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。   接收TCP 客户的连接(阻塞式)等待连接的到来 sk.connect(address)   连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。 sk.connect_ex(address)   同上,只不过会有返回值,连接成功时返回 0 ,连接失败时候返回编码,例如:10061 sk.close()   关闭套接字 sk.recv(bufsize[,flag])   接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息

Nginx工作原理和优化

匿名 (未验证) 提交于 2019-12-02 22:10:10
1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。 Nginx的模块从结构上分为核心模块、基础模块和第三方模块: 核心模块:HTTP模块、EVENT模块和MAIL模块 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块, 第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。 用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。 Nginx的模块从功能上分为如下三类。 Handlers(处理器模块)。此类模块直接处理请求,并进行输出内容和修改headers信息等操作。Handlers处理器模块一般只能有一个。 Filters (过滤器模块)。此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。 Proxies (代理类模块)。此类模块是Nginx的HTTP Upstream之类的模块

C# 同步更新系统时间

匿名 (未验证) 提交于 2019-12-02 22:06:11
前言 在定位用户问题时,发现有些电脑,会出现系统时间不是最新的问题。 可能原因: 取消了勾选服务器时间同步 当前安装的系统,是一个未知来源系统,导致系统时间更新失败 而系统时间不正确,会导致IE选项-证书,校验不通过~ 更新系统时间 1. 连接时间服务器 时间服务器列表(推荐): string[] timeHosts = { "time.windows.com", "time.nist.gov" }; 1 /// <summary> 2 /// 连接时间服务器 3 /// </summary> 4 /// <param name="socket">服务器接口</param> 5 /// <param name="startTime">开始时间</param> 6 /// <param name="errorMsg">错误信息</param> 7 /// <returns></returns> 8 private static bool TryConnectToTimeServer(out Socket socket, out DateTime startTime, out string errorMsg) 9 { 10 socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType

mysql数据库连接,No such file or directory 错误

匿名 (未验证) 提交于 2019-12-02 22:02:20
解决方法: 1、确定是mysqli_connect()和mysqli_pconnect()的问题,故障现象就是函数返回空,而mysqli_error()返回”No such file or directory”。 2、写个phpinfo页面,找到mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket。 3、启动mysql,执行命令 STATUS; 记下UNIX socket的值。 4、如果2和3的值不一样,则打开php.ini(可以从phpinfo页面中找到php.ini的位置,默认是/private/etc/php.ini),将2中提到的三个配置项的值改成3的值。 之后重启php-fpm问题解决