How to set up a Winsock UDP socket?

前端 未结 4 1526
花落未央
花落未央 2021-02-02 14:21

I want to create a Winsock UDP socket that only sends data to a client. I want the kernel to choose an available port for me. On the other hand, I want to indicate which local I

4条回答
  •  攒了一身酷
    2021-02-02 14:43

    The answer of Graeme Perrow doesn't work anymore because inet_addr is deprecated. Use inet_pton instead like this:

    #include 
    #include 
    #include 
    
    #pragma comment(lib, "ws2_32.lib")
    using namespace std;
    
    int main() {
        const char* pkt = "Message to be sent";
        const char* srcIP = < source IP address >;
        const char* destIP = < destination IP address >;
        sockaddr_in dest;
        sockaddr_in local;
        WSAData data;
        WSAStartup(MAKEWORD(2, 2), &data);
    
        local.sin_family = AF_INET;
        inet_pton(AF_INET, srcIP, &local.sin_addr.s_addr);
        local.sin_port = htons(0);
    
        dest.sin_family = AF_INET;
        inet_pton(AF_INET, destIP, &dest.sin_addr.s_addr);
        dest.sin_port = htons(< destination port number >);
    
        SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        bind(s, (sockaddr *)&local, sizeof(local));
    
        sendto(s, pkt, strlen(pkt), 0, (sockaddr *)&dest, sizeof(dest));
    
        closesocket(s);
        WSACleanup();
    
        return 0;
    }
    

提交回复
热议问题