freecplus框架-tcp网络通信

一、源代码说明

freecplus是一个Linux系统下的C/C++开源框架,源代码请前往C语言技术网(www.freecplus.net)下载。

本文介绍的是freecplus框架的TCP/IP协议网络通信的函数和类。

函数和类的声明文件是freecplus/_freecplus.h。

函数和类的定义文件是freecplus/_freecplus.cpp。

示例程序位于freecplus/demo目录中。

编译规则文件是freecplus/demo/makefile。

二、概述

freecplus框架对socket通信封装如下:

CTcpClient类:socket通信的客户端类。

CTcpServer类:socket通信的服务端类。

TcpRead函数:接收socket的对端发送过来的数据。

TcpWrite函数:向socket的对端发送数据。

Readn函数:从已经准备好的socket中读取数据。

Writen函数:向已经准备好的socket中写入数据。

在阅读本文章之前,您必须熟悉TCP/IP协议和socket通信,本文是介绍的是freecplus框架中网络通信的类和函数的用法,不会介绍网络通信的基础知识。

三、通信的报文格式

freecplus框架的socket通信报文格式如下:

报文长度+报文内容

报文长度为4字节的整数,表示的是报文内容的长度,而不是整个TCP报文的长度,整个TCP报文的长度是报文内容的长度+4

报文长度是4字节的整数,即int,是以二进制流的方式写入socket,不是ascii码。

采用CTcpClient类、CTcpServer类、TcpRead函数和TcpWrite函数进行socket通信,可以避免TCP报文粘包的问题。

四、socket通信客户端

socket通信的客户端封装在CTcpClient类中。

类的声明:

// socket通信的客户端类
class CTcpClient
{
   
public:
  int  m_sockfd;    // 客户端的socket.
  char m_ip[21];    // 服务端的ip地址。
  int  m_port;      // 与服务端通信的端口。
  bool m_state;     // 与服务端的socket连接状态。
  bool m_btimeout;  // 调用Read和Write方法时,失败的原因是否是超时:true-未超时,false-已超时。
  int  m_buflen;    // 调用Read方法后,接收到的报文的大小,单位:字节。

  CTcpClient();  // 构造函数。

  // 向服务端发起连接请求。
  // ip:服务端的ip地址。
  // port:服务端监听的端口。
  // 返回值:true-成功;false-失败。
  bool ConnectToServer(const char *ip,const int port);

  // 接收服务端发送过来的数据。
  // buffer:接收数据缓冲区的地址,数据的长度存放在m_buflen成员变量中。
  // itimeout:等待数据的超时时间,单位:秒,缺省值是0-无限等待。
  // 返回值:true-成功;false-失败,失败有两种情况:1)等待超时,成员变量m_btimeout的值被设置为true;2)socket连接已不可用。
  bool Read(char *buffer,const int itimeout=0);

  // 向服务端发送数据。
  // buffer:待发送数据缓冲区的地址。
  // ibuflen:待发送数据的大小,单位:字节,缺省值为0,如果发送的是ascii字符串,ibuflen取0,如果是二进制流数据,ibuflen为二进制数据块的大小。
  // 返回值:true-成功;false-失败,如果失败,表示socket连接已不可用。
  bool Write(const char *buffer,const int ibuflen=0);

  // 断开与服务端的连接
  void Close();

  ~CTcpClient();  // 析构函数自动关闭socket,释放资源。
};

五、socket通信的服务端

socket通信的服务端封装在CTcpServer类中。

类的声明:

// socket通信的服务端类
class CTcpServer
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
说明: 1此程序由ecz00程序优化而来 地址 http://download.csdn.net/download/ecz00/9403630 因此程序可以说是网上唯一的tcpclient使用的中文案例,提供了我思路,在此感谢 ;为什么用这个插件,vb自带的插件winsock 这么有用的插件 居然不是微软自带的插件, 最要命的是 直接注册ocx控件 win7 win10上可能因为序列号无法注册,那么vb下如何开发ip客户端,变得很麻烦,尝试过APi方法的,但是过于复杂,程序量太大,比较麻烦,因此用 此方案比较可行,在原版的基础上花了5天时间摸索和优化, 此版本使用方法 1 把vbRichClient5.dll放进C:\Windows\SysWOW64 (64位系统) 2 在vb6中点击 工程->引用 把上面的dll引用进来就可以额,不需要注册 3:使用sscom5.12.1 或其他tcp调试软件软件启动tcpserver 地址是127,0,0,1 5676 4:直接运行本软件即可使用。点击连接,显示成功,说明连接成功,可以相互发送数据了 服务端的程序在原版上未做修改,请自行优化 此软件改进了原版 1:无法显示连接状态和错误信息 2:只能发送不能接收 3:使用主机名的连接方式,无法直接使用,一开始 4:无法显示byte值 5:界面修改 6:连接的时候,不断开以前的连接,造成重复连接 提示 vbRichClient5的手册找遍了都找不到,估计作者都没写,更别想有中文版了,所以只能 在vb6中点击视图-》对象窗口,可显示vbRichClient5.dll 所有的类和方法 QQ175891641 2018-2-15优化

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值