#include <cstring> #include <iostream> #include <ctime> #include <list> #include <iostream> #include <vector> #include <chrono> #include <thread> #include <basetsd.h> #include "CUdp.h" using namespace std; //int cudp_test() int main() { char szBuffer[32] = { 0 }; CUdpServer server; server.SetParameter(60001); CUdpClient client; client.SetParameter(60001, "192.168.1.135"); std::strcpy(szBuffer, "abcedfe"); std::cout << "Client Send: " << szBuffer << std::endl; client.SendTo(szBuffer, std::strlen(szBuffer)); memset(szBuffer, 0, sizeof(szBuffer)); server.ReceiveFrom(szBuffer, sizeof(szBuffer)); std::cout <<"Server Receive : " << szBuffer << std::endl; std::strcpy(szBuffer, "daaaaaaaaaaaaaaaaa"); std::cout << "Server Send: " << szBuffer << std::endl; server.SendTo(szBuffer, std::strlen(szBuffer)); memset(szBuffer, 0, sizeof(szBuffer)); client.ReceiveFrom(szBuffer, sizeof(szBuffer)); std::cout << "Client Receive : " << szBuffer << std::endl; //a.Start(); getchar(); return 0; }
#include "CUdp.h" #include <cstdlib> #include <cstring> CUdpObject::CUdpObject() { WSADATA stData; WSAStartup(MAKEWORD(2, 2), &stData); m_sktUdpObject = socket(AF_INET, SOCK_DGRAM, 0/*IPPROTO_UDP*/); } CUdpObject::~CUdpObject() { closesocket(m_sktUdpObject); WSACleanup(); } void CUdpObject::SetParameter(int nPort, const char* szAddress) { m_nPort = nPort; m_sktUdpObjectAddress.sin_family = AF_INET; m_sktUdpObjectAddress.sin_port = htons(m_nPort); if (nullptr != szAddress) { std::strcpy(m_szAddress, szAddress); m_sktUdpObjectAddress.sin_addr.s_addr = inet_addr(m_szAddress); } else { m_sktUdpObjectAddress.sin_addr.s_addr = INADDR_ANY; } } sockaddr_in& CUdpObject::SocketAddress() { return m_sktUdpObjectAddress; } int CUdpObject::SendTo(const char* szData, int nDataLength) { sockaddr_in& sktAddress = SocketAddress(); int nTransferred = sizeof(sktAddress); int nReturn = sendto(m_sktUdpObject, szData, nDataLength, 0, (const sockaddr*)&sktAddress, nTransferred); if (SOCKET_ERROR == nReturn) return S_FALSE; return S_OK; } int CUdpObject::ReceiveFrom(char* szBuffer, int nBufferSize) { sockaddr_in& sktAddress = SocketAddress(); int nTransferred = sizeof(sktAddress); int nReturn = recvfrom(m_sktUdpObject, szBuffer, nBufferSize, 0, (sockaddr*)&sktAddress, &nTransferred); if (SOCKET_ERROR == nReturn) return S_FALSE; return S_OK; } void CUdpServer::SetParameter(int nPort, const char* szAddress) { CUdpObject::SetParameter(nPort, nullptr); bind(m_sktUdpObject, (const sockaddr*)&m_sktUdpObjectAddress, sizeof(m_sktUdpObjectAddress)); } sockaddr_in& CUdpServer::SocketAddress() { return m_sktAddressClient; }
#include <WinSock2.h> #pragma comment(lib, "ws2_32.lib") class CUdpObject { protected: CUdpObject(); virtual ~CUdpObject(); public: virtual void SetParameter(int nPort, const char* szAddress = nullptr); public: virtual int SendTo(const char* szData, int nDataLength); virtual int ReceiveFrom(char* szBuffer, int nBufferSize); protected: virtual sockaddr_in& SocketAddress(); protected: int m_nPort = 0; SOCKET m_sktUdpObject; char m_szAddress[32] = { 0 }; sockaddr_in m_sktUdpObjectAddress = { 0 }; }; class CUdpClient : public CUdpObject { public: CUdpClient() : m_bIsConnect(true) { }; virtual ~CUdpClient() { }; public: bool m_bIsConnect; }; //Single Client class CUdpServer : public CUdpObject { public: CUdpServer() { }; virtual ~CUdpServer() { }; public: void SetParameter(int nPort, const char* szAddress = nullptr) override; public: sockaddr_in& SocketAddress() override; private: sockaddr_in m_sktAddressClient = { 0 }; };
/* 格式乱了 */