网络库(tcp)
windows: select, iocp
linux: select, epoll

1, 对外接口
class IOService
{
public:
    //阻塞connect
    bool connectPeer(const char* ip, UI32 port);

//listen for the peer connect
    void listen(const char* ip, UI32 port);

//send data to peer, 如果连接已断开,则丢弃该消息
    void send(UI32 index, UI64 serial, const char* buf, UI32 len);

void closePeer(UI32 index, UI64 serial);

//网络主循环,如果有网络时间,则每帧处理count次事件
    void eventLoop(UI32 count, UI32 time_out);
};

2, 读缓存和写缓存
读缓存: tcp流需要自己定制消息边界,而消息长度不固定,如果某次接受到半条消息,无法进行处理,只能存入读缓存,等待消息完整后才处理
写缓存: 发数据的时候,对端有可能崩溃,导致写操作阻塞。所以需要写缓存来异步。

3, 节点管理,需要一个结合来管理所有连接着的节点。
有可能节点已断开连接,且delete。而此时有该节点的消息需要发送。所以需要一种机制,发送消息的时候可以确保该节点还连接着。
我这里用的数组+serial方式。用数组来保存所有节点信息,且限制最大连接数。收到消息后,打包成一个新消息,包含消息内容,index, serial

每个节点连接进来的时候,在数组中根据socket==invalid socket的属性,分配到一个未被使用的index,同时给该节点赋值一个唯一的serial属性(uuid),
节点断开连接时,修改socket=invalid socket.
要发送消息的时候,根据index找到数组中的节点信息,1,判断socket是否为invalid socket,知道是否已断开连接; 根据serial是否一样,
知道是否已经断开连接,然后别其他新连接占用。

工程代码(vs2008)

windows-select:    http://download.csdn.net/detail/zozoiiiiiiii/5154702

windows_iocp:       http://download.csdn.net/detail/zozoiiiiiiii/5154710

libnet: 目前支持windows selec, iocp  : http://download.csdn.net/detail/zozoiiiiiiii/5162965

有问题q: 452071784

libs--libnet相关推荐

  1. libnet编译,windows/Linux

    windows下 1.下载安装包libnet-libnet-1.2-rc2.zip https://github.com/sam-github/libnet/releases 2.解压缩到D:\lib ...

  2. libnet安装配置

    安装编译 1.下载安装包 http://sourceforge.net/projects/libnet-dev/ 2.解压 tar zxvf libnet-1.2-rc3.tar.gz 3.进去编译 ...

  3. Makefile 选项 CFLAGS 、LDFLAGS 、LIBS

    CFLAGS 表示用于C编译器的选项 CXXFLAGS 表示用于C++编译器的选项 这两个变量实际上涵盖了编译和汇编的两个步骤 CFLAGS:指定头文件(.h)的路径,如:CFLAGS=-I/usr/ ...

  4. Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86

    简介 在Android日常的开发过程中有的项目需要引入第三方的库,有时候大家可能会在libs文件夹下看到 mips.armeabi.armeabi-v7a和x86这四个文件夹.那么这三个文件夹下面的包 ...

  5. Best of Ruby Quiz 笔记之一:Mad Libs

    我想读<Best of Ruby Quiz>并实践里面的内容是熟悉ruby的一个好方法,那么让我从今天开始,每天都用ruby来quiz一下.             几点说明:1.我是ru ...

  6. AndroidStudio开发jni不加载libs的so,只加载jniLibs的so

    AndroidStudio开发jni不加载libs的so,只加载jniLibs的so,找了很多的办法,只有把libs文件夹改成jniLibs文件夹app才正常,因为ndk自动生成libs文件夹,有没有 ...

  7. 编译gtk+程序报错gcc: pkg-config --cflags --libs gtk+-2.0: 没有那个文件或目录

    第一次接触gtk+.在网上搜罗良一番,装好相应的库后,编写了第一hello程序.在编译时输入以下命令:gcc -o hello hello.c 'pkg-config --cflags --libs ...

  8. libnet发包java语言_libnet-1.1.2.1

    [实例简介] libnet源码.如果没有资源分的话,可以发邮件至yzj19870824@126.com.我会寄给你 [实例截图] [核心代码] c92ede2c-71aa-49dd-b078-04d6 ...

  9. Makefile选项CFLAGS LDFLAGS LIBS

    FLAGS 表示用于 C 编译器的选项, CXXFLAGS 表示用于 C++ 编译器的选项. 这两个变量实际上涵盖了编译和汇编两个步骤. CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS ...

  10. libnet apply method

    Libnet是一个高层API,使用C语言实现的,为应用程序设计人员提供了底层的网络数据报的构造处理和发送等功能接口. Libnet提供的接口函数主要用于实现和封装了数据包的构造和发送过程. 首先是对l ...

最新文章

  1. 使用TypeScript映射和条件类型使React组件更出色
  2. Math类(工具类)
  3. Downsample 平移不变性
  4. linux_一些shell命令分析记录
  5. session过期跳转到登陆页面并跳出iframe框架的最简单方法
  6. 委托 匿名类 var隐式类型 匿名方法
  7. BZOJ-1857-传送带-SCOI2010
  8. centos 安装低版本内核_Linux 升级内核
  9. 【原】macbook不睡眠的排查与解决
  10. oopc——0.概念及为何要学习oopc
  11. IntelliJ IDEA Maven安装配置
  12. 启动分区不存在,使用分区工具修正
  13. 计算机数控编程特点,什么是数控图像编程系统有哪些特点
  14. 基于双边滤波的人脸美化
  15. java火焰纹章攻略女神之剑_火焰纹章晓之女神图文攻略(4)
  16. 目前计算机常用的CPU型号,价格差异太大了!教你选择CPU型号及常见CPU后缀字母详解...
  17. BMP280读不出数据(附驱动),数据一直不变解决方法,硬件I2C
  18. 【解决Maven项目module不显示蓝色小方块/java文件显示灰色橙色/module already exists问题】
  19. 基于Python的ERP系统中主生产计划(MPS)的计算
  20. antd upload一直处于uploading状态

热门文章

  1. SAP采购中基于收货的发票校验应用逻辑及控制
  2. 前端JavaScript代码混淆加密原理介绍
  3. Adobe acrobat 打开pdf文件字体模糊的解决办法
  4. for循环中的break与continue
  5. 中国象棋将帅问题的另类解法
  6. Java一对多、多对多关系示例
  7. 隧道技术之 外网访问内网
  8. MOCTF-MISC-writeup
  9. stm32捕获占空比_【电机控制】六步法驱动BLDC电机,使用硬件COM事件,STM32+CUBEMX(HAL库)配置...
  10. 转向新页,控制页面大小并传值