这是一个使用C++封装的TCP/IP协议栈(仅传输层),属于本人所设计的中间件的一员,具有硬件无关,应用无关特性,使用非常方便,一看代码便知:

 #include "net.h"       // 包含这个net.h就可以使用所有TCP/IP中间件的以下4个功能

 TcpClient     tcpc1;    // 定义一个TCP客户端,用于主动连接目标主机
TcpListener tcpl1;    // 定义一个TCP服务端,用于侦听来自远程主机的连接
Socket socket1;   // 定义一个符合Berkeley套接字标准的socket
UdpClient udp1;   // 定义一个UDP客户端
// 测试TCP客户端
void TestTcpClient(void){
tcpc1.Init(“192.168.1.120”,); // 建立默认远程主机
tcpc1.Connect(); // 连接,任务将阻塞,连接成功或连接超时返回,.Connect(3000)表示3秒超时,无参数表示不超时
tcpc1.Send("Hello, TcpClient !\n");
tcp1.Close(); // 关闭连接
}
// 测试TCP服务端
void TestTcpListener(void){
int len;
byte rxbuf[];
tcpl1.Init(); // 将本程序表示为11000端口
tcpl1.Start(); // 开始异步侦听
while(true){
len = tcpl1.rxStream.GetNewLine(rxbuf,sizeof(rxbuf)); // 读数据,接收成功返回长度,否则返回0
if(len){
tcpl1.Send(“\n接收到:”)
tcpl1.Send(rxbuf,len); // 将接收到的数据发回
}
}
tcp1.Close(); // 关闭连接,示意性代码
}
// 测试socket
void TestSocket(void){
socket1.Init(SOCK_STREAM,); // 使用流协议,也可以使用数据报协议SOCK_DGRAM
socket1.Connect(“192.168.1.120”,);
socket1.Send("Hello, Socket !\n");
socket1.Close();
// 另外还有Bind与Listen函数可用于侦听连接
}
// 测试UDP
void TestUDP(void){
int len;
char* rxbuf;
EndPoint* remoteEP;   // 用于存储远程地址
udp1.Init(); // 适用于接收
//udp1.Init(“192.168.1.120”,11001); // 适用于发送
udp1.ReceQueueInit(); // 初始化接收队列,1024字节,如果没有此句,一次只能接收一个包
// 如果使用接收队列,接收可在后台完成,前台慢慢处理,不丢包
udp1.Open(); // 打开端口 remoteEP = new EndPoint; // 使用动态分配,该动态内存分配算法是中间件的一部分
rxbuf = new char[];
while()
if(udp1.IsReceived()){
memset(rxbuf,,);
len = udp1.ReceiveFrom(rxbuf,,remoteEP);
if(len){
// 打印消息内容,长度,发送者IP地址,发送者端口
ComPrintf("msg = %s,len = %l,for:ip=%d.%d.%d.%d,port=%l\n",
rxbuf,
len,
remoteEP->Address.bytes[],
remoteEP->Address.bytes[],
remoteEP->Address.bytes[],
remoteEP->Address.bytes[],
remoteEP->Port);
}
}
}
delete remoteEP;
}
// 需要在第一个任务调用NetInit()函数即可启动网络服务

  只需一个库文件与一个头文件以及一个硬件相关的驱动文件再加上一个配置文件即可使用,配置文件图形化操作:

这样项目就可以轻松使用网络连接功能了!

一种面向对象的TCP/IP中间件的更多相关文章

  1. 几种开放源码的TCP/IP协议栈比较

    http://blog.chinaunix.net/uid-28785506-id-3828286.html 原文地址:几种开放源码的TCP/IP协议栈比较 作者:三点水兽 1.BSD TCP/IP协 ...

  2. 几种开源的TCP/IP协议栈分析

    1:BSD TCP/IP协议栈,BSD栈历史上是其他商业栈的起点,大多数专业TCP/IP栈(VxWorks内嵌的TCP/IP栈)是BSD栈派生的.这是因为 BSD栈在BSD许可协议下提供了这些专业栈的 ...

  3. 【程序猿笔试面试复习】之中的一个 网络与通信篇(一) 几大网络模型:OSI、TCP/IP、B/S与C/S、MVC结构

    9.1网络模型 9.1.1. OSI七层模型 OSI(Open System Interconnection,开放系统互联)七层网络模型称为开放式网络互联參考模型.其为国际标准组织指定的一个指导信息互 ...

  4. 图解TCP/IP→第2章基础知识

    ####TCP.IP背景**关键词:ARPANET,UNIX,分组交换技术,*ARPANET(阿帕网),也是全球互联网的鼻祖.阿帕网的成功也充分证明了基于分组交换技术的通信方法的可行性.*20世纪70 ...

  5. TCP/IP四层模型和OSI七层模型

    TCP/IP四层模型 TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对 ...

  6. TCP/IP, HTTP, socket

    摘自:http://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html http://goodcandle.cnblogs.com/arch ...

  7. Linux TCP/IP 协议栈之 Socket 的实现分析(一)

    内核版本:2.6.37参考[作者:kendo的文章(基于内涵版本2.6.12)] 第一部份 Socket套接字的创建 socket 并不是 TCP/IP协议的一部份. 从广义上来讲,socket 是U ...

  8. 【TCP/IP 合约】 TCP/IP 基金会

    总结 : 通过学习 TCP/IP 基础, 并总结相关笔记 和 绘制思维导图 到博客上, 对 TCP/IP 框架有了大致了解, 之后開始详细学习数据链路层的各种细节协议, 并作出笔记; 博客地址 : h ...

  9. TCP/IP笔记(二)TCP/IP简介

    上回,主要介绍了下协议和OSI参考模型,并简单了解下网络构成要素,这回该说说TCP/IP了 互联网与TCP/IP的关系   互联网进行通信时,需要相应的网络协议,TCP/IP原本就是为使用互联网而开发 ...

随机推荐

  1. Livecoding.tv 现正举行iOS及Android App设计比赛

    近日,Livecoding.tv, 一个为世界各地的程序员提供在线实时交流的平台,在其网站上发布了一篇通知, 宣布从4月15日至5月15日,会为iOS和Android的开发者举办一场本地移动app设计 ...

  2. javascript的垃圾收集机制

    × 目录 [1]原理 [2]标记清除 [3]引用计数[4]性能问题[5]内存管理 前面的话 javascript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存.在编写javascri ...

  3. MVC默认路由实现分页-PagerExtend.dll

    这两天在群里有人咨询有没有现成的.net mvc分页方法,由此写了一个简单分页工具,这里简单分享下实现思路,代码,希望能对大家有些帮助,鼓励大家多造些轮子还是好的. A.效果(这里用了bootstra ...

  4. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  5. 个人随想:对于一个.Neter来说,如果一直想走技术路线,该怎么走下去

    前言 首先我不是一个合格的.Neter,也许在这里我的技术算是很菜的,不过我也是有想法的人,下面罗列出我的想法和将要实现的技术路线图. 1.学习一门底层语言 比如学习C语言,学习C语言的最终目的我觉得 ...

  6. Write thread-safe servlets [reproduced]

    If you write Web applications in Java, the servlet is your best friend. Whether you write Java Serve ...

  7. golang 使用 iota

    iota是golang语言的常量计数器,只能在常量的表达式中使用. iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(io ...

  8. 认识W3C标准盒子模型,理解外边距叠加

    概述: 注:加粗斜体字是非常重要的概念,决定着你是不是能看懂那句话,所以不懂的请一定要搜索一下. 页面上的每个元素,都在一个矩形框里.   每个矩形框都是一个盒模型.   每个盒模型都由内容区域(co ...

  9. Zip 压缩和解压技术在 HTML5 中的应用

    JSZip 是一款可以创建.读取.修改 .zip 文件的 javaScript 工具.在 web 应用中,免不了需要从 web 服务器中获取资源,如果可以将所有的资源都合并到一个 .zip 文件中,这 ...

  10. Rafy 框架 - 流水号插件

    Rafy 框架又添新成员:流水号插件.本文将解释 Rafy 框架中的流水插件的场景.使用方法. 场景 在开发各类数据库应用系统时,往往需要生成从一开始的流水号,有时还需要按月或者按日进行独立生成,如下 ...