C++socket编程(四):4.2 创建XTcp动态链接库项目

本文介绍了如何在C++中创建XTcp动态链接库项目,用于TCP客户端和服务端的通信。首先,作者指出通用的TCP操作如创建socket、发送和接收数据可以封装到一个库中,以提高代码复用性。接着,详细说明了在Linux环境下生成动态库的步骤,包括编写makefile、XTcp.cpp和XTcp.h文件。最后,展示了服务器如何调用该动态库,并提到了动态库的环境变量配置问题及其解决方案。
摘要由CSDN通过智能技术生成

前言:
在完成了TCP的服务端Demo之后,现在开始尝试开发客户端方面的项目。在做客户端之前先想下,客户端和服务端是不是公用一些类,头文件,创建socket,关闭socket,recv,send。这些客户端和服务端应该是公用的。应该放在XTcp.h,XTcp.cpp中。如果我们直接把这些文件加入到我们的项目中,这个方案非常不灵活,每次编译项目的时候,都要加一大推文件。还要重新编译这部分代码。如果解决这个问题呢?这里提出一个动态库的概念。

本博客重点将linux下将服务器的建立绑定连接socket功能接口的过程。
如下代码:
创建so的makefile

libxsocket.so:XTcp.h XTcp.cpp
        g++ $+ -o $@ -fpic -shared -std=c++11

编译生成动态链接库的生成文件XTcp.cpp

#include "XTcp.h"
#ifdef WIN32
#include <Windows.h>
#define socklen_t int
#else
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#define closesocket close
#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <thread>

using namespace std;

XTcp::XTcp()
{
#ifdef WIN32
	static bool f
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是我自己编写的 测试好使通过 //======================================================================== //绑定协议栈-TCPServer mode //======================================================================== int dllBindTCPSockServer(SOCKADDR_IN pSockAddr,RECV_DATA_CALLBACK DataCallBack, VOID* pContext) { int res = 0; //Create Socket if(glb_SockTCPServer!=NULL) { OutputDebugString("套接字已存在!"); return -1; } glb_SockTCPServer = socket(AF_INET,SOCK_STREAM,0); //Create Socket res = WSAGetLastError(); if(res) { glb_SockTCPServer = NULL; OutputDebugString("套接字建立失败!"); return res; } pSockAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); pSockAddr.sin_family=AF_INET; pSockAddr.sin_port = htons(pSockAddr.sin_port); res = bind(glb_SockTCPServer,(SOCKADDR*)&pSockAddr,sizeof(SOCKADDR)); if(res) { OutputDebugString("绑定失败!"); closesocket(glb_SockTCPServer); glb_SockTCPServer = NULL; return res; } OutputDebugString("绑定成功!"); res = listen(glb_SockTCPServer,5); if(res) { OutputDebugString("监听失败!"); closesocket(glb_SockTCPServer); glb_SockTCPServer = NULL; return res; } OutputDebugString("开始网络监听..."); //Register RecvDataCallBackServer glb_lpFunCallBackTCPServer = DataCallBack; glb_pContext = pContext; //Create ListenThread UINT (WINAPI * pFnStartAddr)(LPVOID); pFnStartAddr = WinSockListenThread; glb_WinSockListenThread = (HANDLE)_beginthreadex(NULL, 0, pFnStartAddr, NULL, 0,//0 for running, CREATE_SUSPENDED NULL); if (glb_WinSockListenThread==NULL) { OutputDebugString("创建监听线程失败!"); closesocket(glb_SockTCPServer); glb_SockTCPServer = NULL; glb_WinSockListenThread = NULL; return -2; } return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值