第三次总结

第四章:

socket函数:

为了执行网络I/O,一个进程必须做的第一件事是调用socket函数,指定希望同学的协议类型,

int socket(int family, int type, int protocol); 成功返回非负描述符,错误返回-1;

参数 family:

AF_INET IPv4协议

AF_INET6 IPv6协议

AF_LOCAL Unix域协议

AF_ROUTE 路由套接字

AF_KEY  秘钥套接字

参数type:

SOCK_STREAM: 提供面向连接的稳定数据传输,即TCP协议。

OOB: 在所有数据传送前必须使用connect()来建立连接状态。

SOCK_DGRAM: 使用不连续不可靠的数据包连接, 即UDP协议。

SOCK_SEQPACKET: 提供连续可靠的数据包连接。

SOCK_RAW: 提供原始网络协议存取。

SOCK_RDM: 提供可靠的数据包连接。

SOCK_PACKET: 与网络驱动程序直接通信。

参数protocol:

IPPROTO_TCP : TCP 传输协议

IPPROTO_UDP : UDP 传输协议

IPPROTO_SCTP  : SCTP 传输协议

connect函数:

TCP客户用connect函数来建立与TCP服务器的连接。

int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);成功返回0 错误返回-1;

bind函数:

bind函数把一个本地协议地址赋予一个套接字。对于网际网协议,协议地址是32位的IPv4地址或者128位的IPv6地址与16位的TCP或UDP端口号的组合。

int bind(int socketfd, const struct sockaddr *myaddr, socklen_t addr) 成功返回0 错误返回-1。

listen函数:

listen函数仅由服务器调用,当socket函数创建一个套接字时,listen函数把一个未连接的套接字转化成一个被动套接字。第二个参数规定了内核应该为响应套接字排队的最大连接数。

int listen(int sockfd, int backlog) 成功返回0 错误返回-1。

accept函数:

由TCP服务器调用,用于从已完成连接队列头返回下一个已完成连接。如果已完成队列为空,那么进程被投入睡眠。

int accept(int sockfd, struct sockaddr * cliaddr, socklen_t addrlen);成功返回非负描述符,错误去返回-1。

close函数:

关闭描述符。

int close(int sockfd); 成功返回0 失败返回-1;

第六章:

阻塞式I/O:

进程调用recvfrom, 其系统调动直到数据报达到且被复制到应用进程的缓冲区中或者发生错误才返回。我们说进程在从调用recvfrom开始到它返回的整段时间内是被阻塞的。recvfrom成功返回后,应用进程开始工作。

非阻塞式I/O:

进程把一个套接字设置成非阻塞是在通知内核:当所请求的I/O操作非得把本进程投入睡眠才能完成时,不要把本进程投入睡眠,而是返回一个错误,当无数据报准备好的时候返回一个错误,当有数据报准备好的时候返回成功。

I/O复用模型:

select和poll模型,阻塞在这2个系统调用中的某一个智商,而不是阻塞在正在真正的I/O系统调用上。

信号驱动式I/O模型:

让内核在描述符就绪式发送SIGIO信号通知我们。

异步I/O模型:

告知内核启动某个操作(包括数据从内核复制我们自己的缓冲区),并让内核在整个操作完成后通知我们。

同步I/O和异步I/O对比:

同步I/O操作导致请求进程阻塞,知道I/O操作完成;同步I/O包括阻塞式I/O,非阻塞式I/O,I/O复用模型:,信号驱动式I/O模型,

异步I/O操作不导致请求进程阻塞。异步I/O包括异步I/O模型。

select函数:

select告知内核中哪些描述符就绪(读,写或异常条件)

int select(int maxfdp1, fd_set *readset, fd_set * writeset, fd_set *exceptset, const struct timeval * timeout);

maxfdp1是指最大描述符数量,readset是可读描述符集合,writeset是可写描述符集合,exceptset是可接受连接描述符集合,timeval是设置select的时间设置。


kbengine

服务器目录结构:

|- kbengine (KBE_ROOT 根目录)

|- assets (默认的游戏项目资产库,你可以添加新的资产库通过环境变量绑定)

|- res (所有资源文件)

|- spaces (通常存放游戏场景相关的资源,例如Navmesh)

|- server (通常放置服务端相关的配置文件)

|- scripts (所有的游戏逻辑,Python文件)

|- base (Base的Python逻辑)

|- cell (Cell的Python逻辑)

|- client (Client的Python逻辑)

|- bots (机器人的Python逻辑,压力测试)

|- common (逻辑公共文件夹)

|- data (游戏逻辑用到的数据资源)

|- db (dbmgr扩展脚本)

|- entity_defs (实体定义与声明)

|- interfaces (实体的接口声明)

|- server_common (服务端逻辑公共)

|- user_type (自定义用户类型目录)

|- kbe (引擎目录)

|- tools (引擎工具)

|- server (引擎服务端工具)

|- guiconsole (可视化的控制台工具)

|- install (引擎安装工具)

|- pycluster (跨平台的集群控制Python脚本工具)

|- xlsx2py (游戏数据表导出工具)

|- src (KBEngine源代码)

|- build (makefile公共脚本)

|- client (客户端插件和例子目录)

|- kbengine_dll (Windows应用程序插件源代码)

|- common (公共目录)

|- lib (各种模块源代码)

|- client_lib (客户端底层公共框架)

|- cstdkbe (KBEngine标准库)

|- db_mysql (Mysql存取实现)

|- dbmgr_lib (数据存取公共接口)

|- dependencies (依赖库)

|- entitydef (实体定义解析模块)

|- helper (一些通用的协助性模块)

|- math (数学相关)

|- navigation (2D/3D导航模块)

|- network (网络模块)

|- pyscript (脚本插件)

|- python (python源代码)

|- resmgr (资源管理器)

|- server (服务端公共模块)

|- thread (多线程模块)

|- xmlplus (xml解析库)

|- libs (编译后的*.lib, *.a文件)

|- server (服务端app源代码)

|- baseapp (baseapp源代码)

|- baseappmgr (baseappmgr源代码)

|- cellapp (cellapp源代码)

|- cellappmgr (cellappmgr源代码)

|- dbmgr (dbmgr源代码)

|- loginapp (loginapp源代码)

|- machine (machine源代码)

|- resourcemgr (resourcemgr源代码)

|- tools (服务端助手工具)

|- interfaces (支持第三方计费、第三方账号等接口)

|- bots (压力测试, 虚拟客户端, 源码)

|- guiconsole (可视化的控制台工具源码)

|- message_log (服务端log收集工具源码)

|- res (引擎资源目录)

|- key (RSA密钥)

|- scripts (Python脚本库)

|- server (服务端引擎配置)

|- log4cxx_properties (log4cxx配置)

|- doc (指南文档源代码)

|- bin (编译后的可执行文件存放目录)

|- client (编译后的客户端exe可执行文件存放目录)

|- server (编译后的服务端可执行文件存放目录)

|- logs (服务端运行日志)

|- tutoria

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • 《UNIX 网络编程卷一:套接字联网API》笔记 套接字 套接字编程接口,是在 TCP/IP 协议族中,应用层进入...
    超net阅读 5,797评论 2 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,623评论 18 399
  • 利用delegate实现两个Controller之间的传值 RootViewController中用个lable和...
    亡鱼阅读 1,578评论 0 1
  • 写一个函数,批量操作 css 如何获取 DOM 计算后的样式 使用getComputedStyle方法获取 实现效...
    NinthG阅读 632评论 0 49
  • 现在提示框UIalert和UIActionSheet不给用了,苹果把两个合并为了UIalertController...
    lxf_2013阅读 3,647评论 0 2