qtcreator inet_addr

本文介绍了一种解决MinGW在编译过程中无法链接.lib文件的问题的方法。通过在配置中加入特定的库链接指令,可以成功地让MinGW识别并使用所需的库文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BridgeMgr& BridgeMgr::Instance() { static BridgeMgr instance; return instance; } void BridgeMgr::StartUDPRecvThread() { if (m_udpRecvRunning) return; m_udpRecvRunning = true; m_udpRecvThread = std::thread(&BridgeMgr::UDPRecvThreadFunc, this); } void BridgeMgr::StopUDPRecvThread() { m_udpRecvRunning = false; m_udpServer.UnInit(); // 先关闭socket,唤醒阻塞的RecvData if (m_udpRecvThread.joinable()) m_udpRecvThread.join(); } void BridgeMgr::UDPRecvThreadFunc() { WriteLogD("Enter fucnc:%s", __FUNCTION__); char buffer[4096]; sockaddr_in fromAddr; while (m_udpRecvRunning) { int len = m_udpServer.RecvData(buffer, sizeof(buffer), fromAddr); if (len > 0) { WriteLogD("[UDPRecv] recv data len : %d", len); HandleUDPRecvData( (unsigned char*)buffer,len, fromAddr); } else { WriteLogE("[UDPRecv] err: %d, err:%d", len, WSAGetLastError()); Sleep(50); } } } int BridgeMgr::InitBridge() { InitLog(); // 初始化UDP Server if (!m_udpServer.Init()) { //std::cout << "UDP Server 初始化失败!" << std::endl; WriteLogE("UDP Server Init Err!"); } StartBridge(); return 0; } void BridgeMgr::StartBridge() { WriteLogD("StartUDPRecvThread"); StartUDPRecvThread(); } void BridgeMgr::UnInitBridge() { WriteLogD("Enter BridgeMgr UnInit!"); // 停止UDP接收线程 StopUDPRecvThread(); WriteLogD("Exit BridgeMgr UnInit!"); }#include "UDPServer.h" #include <iostream> #include "glog/LogPlusHelper.h" CUDPServer::CUDPServer() : m_sock(INVALID_SOCKET) {} CUDPServer::~CUDPServer() { if (m_sock != INVALID_SOCKET) { closesocket(m_sock); m_sock = INVALID_SOCKET; } } bool CUDPServer::Init() { m_sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (m_sock == INVALID_SOCKET) { WriteLogE("Create socket err:%d", WSAGetLastError()); return false; } int opt = 1; setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt)); sockaddr_in addr = {}; addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(UDP_LOCAL_PORT); if (bind(m_sock, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) { closesocket(m_sock); m_sock = INVALID_SOCKET; WriteLogE("UDP bind port:%d err:%d", UDP_LOCAL_PORT, WSAGetLastError()); return false; } return true; } int CUDPServer::SendData(const char* data, int len, const sockaddr_in& toAddr) { if (INVALID_SOCKET == m_sock) { return -1; } return sendto(m_sock, data, len, 0, (const sockaddr*)&toAddr, sizeof(toAddr)); } int CUDPServer::RecvData(char* buffer, int len, sockaddr_in& fromAddr) { if (INVALID_SOCKET == m_sock) { return -1; } int fromLen = sizeof(fromAddr); return recvfrom(m_sock, buffer, len, 0, (sockaddr*)&fromAddr, &fromLen); } void CUDPServer::UnInit() { if (m_sock != INVALID_SOCKET) { closesocket(m_sock); m_sock = INVALID_SOCKET; } // WSACleanup(); std::cout << "UDPServer resource release!" << std::endl; WriteLogD("UDPServer resource release!"); } #pragma once #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") #define UDP_LOCAL_PORT 49176 #define UDP_REMOTE_PORT 49175 class CUDPServer { public: CUDPServer(); ~CUDPServer(); bool Init(); int SendData(const char* data, int len, const sockaddr_in& toAddr); int RecvData(char* buffer, int len, sockaddr_in& fromAddr); void UnInit(); private: SOCKET m_sock = INVALID_SOCKET; }; 把上面的代码使用qt写,支持跨平台
最新发布
08-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值