C++使用UDP通訊的實現(xiàn)示例
更新時間:2023年12月20日 14:56:51 作者:沈躍泉
本文實現(xiàn)對C++使用UDP做了簡單封裝,實現(xiàn)通訊,包括服務端和客戶端,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
對C++使用UDP做了簡單封裝,可直接運行
頭文件udp.h
#pragma once #include <Winsock.h> #pragma comment(lib,"WS2_32.lib") #define LOCAL_IP_ADDR INADDR_ANY //當前應用程序接收的IP地址 #define LOCAL_PORT 9527 //當前應用程序的端口 #define DEST_IP_ADDR "127.0.0.1" //目標應用程序的IP地址 #define DEST_PORT 9526 //目標應用程序的端口 class UDP { public: UDP(); ~UDP(); void setLocalSockAddr(unsigned long localAddr, const int localPort); //設置當前應用程序的IP地址和端口 void setDestSockAddr(const char* destAddr, const int destPort); //設置目標應用程序的IP地址和端口 int sendData(char* buf, int len); int recvData(char* buf, int len); private: WSADATA m_wsaData; SOCKET m_Socket; sockaddr_in m_localSockAddr; //當前應用程序的sockaddr_in結構體 sockaddr_in m_destSockAddr; //目標應用程序的sockaddr_in結構體 };
源文件udp.cpp
#include "udp.h" UDP::UDP() { WSAStartup(MAKEWORD(2, 2), &m_wsaData); m_Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //將socket設為非阻塞模式 u_long mode = 1; ioctlsocket(m_Socket, FIONBIO, &mode); //設置當前程序和目標程序的配置 setLocalSockAddr(LOCAL_IP_ADDR, LOCAL_PORT); setDestSockAddr(DEST_IP_ADDR, DEST_PORT); } UDP::~UDP() { closesocket(m_Socket); WSACleanup(); } //設置當前應用程序的IP地址和端口 void UDP::setLocalSockAddr(unsigned long localAddr, const int localPort) { //當前應用程序的配置 m_localSockAddr.sin_family = AF_INET; m_localSockAddr.sin_addr.s_addr = htonl(localAddr); m_localSockAddr.sin_port = htons(localPort); //綁定當前應用程序套接字 bind(m_Socket, (SOCKADDR*)&m_localSockAddr, sizeof(m_localSockAddr)); } //設置目標應用程序的IP地址和端口 void UDP::setDestSockAddr(const char * destAddr, const int destPort) { //目標應用程序的配置 m_destSockAddr.sin_family = AF_INET; m_destSockAddr.sin_addr.s_addr = inet_addr(destAddr); m_destSockAddr.sin_port = htons(destPort); } int UDP::sendData(char * buf, int len) { int ret = sendto(m_Socket, buf, len, 0, (SOCKADDR*)&m_destSockAddr, sizeof(m_destSockAddr)); return ret; } int UDP::recvData(char* buf, int len) { int sockAddrSize = sizeof(sockaddr_in); int ret = recvfrom(m_Socket, buf, len, 0, (SOCKADDR*)&m_localSockAddr, &sockAddrSize); return ret; }
使用示例
程序1
#include <iostream> #include "udp.h" int main() { UDP udp; while (1) { char buf[1024]; int ret = udp.recvData(buf, 1024); if (ret > 0) { std::cout << "server recv: " << buf << std::endl; } else { std::cout << "server recv: " << "recv failed" << std::endl; } Sleep(1000); } return 0; }
程序2
需要先將udp.h中宏定義的IP和端口修改一下
#define LOCAL_IP_ADDR INADDR_ANY //當前應用程序接收的IP地址 #define LOCAL_PORT 9527 //當前應用程序的端口 #define DEST_IP_ADDR "127.0.0.1" //目標應用程序的IP地址 #define DEST_PORT 9526 //目標應用程序的端口
#include <iostream> #include "udp.h" int main() { UDP udp; while (1) { char buf[1024] = "hello udp..."; udp.sendData(buf, 1024); std::cout << "client send: " << buf << std::endl; Sleep(1000); } return 0; }
程序運行效果
將兩個程序一起打開,可以看到運行結果
到此這篇關于C++使用UDP通訊的實現(xiàn)示例的文章就介紹到這了,更多相關C++ UDP通訊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用C++實現(xiàn)Excel文件與CSV之間的相互轉換
這篇文章主要為大家詳細介紹了如何使用C++實現(xiàn)Excel文件與CSV之間的相互轉換,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-06-06簡要對比C語言中的truncate()函數(shù)與ftruncate()函數(shù)
這篇文章主要介紹了C語言中的truncate()函數(shù)與ftruncate()函數(shù)的簡要對比,注意其之間的區(qū)別,需要的朋友可以參考下2015-09-09