在 C 中通过 UDP 发送字符串

新手上路,请多包涵

我想通过UDP发送一个字符串: "Jane Doe" 到内网IP 192.168.0.4 到端口 9000 。我已经通过 Java 的 UDP 和 TCP 完成了很多次,但现在我必须使用标准 C++ 库来完成,而且我找不到任何示例,只有人们无法使其工作的主题。

我知道我必须将 "Jane Doe" 编码为字节数组,然后打开套接字,将其打包到数据报中并发送。

C++ 不是我的第一语言,这是我无法弄清楚的一小部分代码,我选择了 UDP,因为它总是比 TCP 简单得多。

原文由 Yoda 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 759
1 个回答

对于 Windows,我采用了 Mikolasan 的 selbie 代码的 最小 化版本,并根据 https://beej.us/guide/bgnet/html/#windows 进行修改以获得一个小的独立示例。

要编译它,您需要链接 Winsock 库。

 #include <iostream>
#include <string>

#include <winsock2.h>

int main()
{
    // Initialise Winsock DLL
    // See https://beej.us/guide/bgnet/html/#windows
    WSADATA wsaData;
    // MAKEWORD(1,1) for Winsock 1.1, MAKEWORD(2,0) for Winsock 2.0
    if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
        fprintf(stderr, "WSAStartup failed.\n");
        exit(1);
    }

    // Set up connection and send
    std::string hostname{ "192.168.0.4" };
    uint16_t port = 9000;

    SOCKET sock = ::socket(AF_INET, SOCK_DGRAM, 0);

    sockaddr_in destination;
    destination.sin_family = AF_INET;
    destination.sin_port = htons(port);
    destination.sin_addr.s_addr = inet_addr(hostname.c_str());

    std::string msg = "Jane Doe";
    int n_bytes = ::sendto(sock, msg.c_str(), msg.length(), 0, reinterpret_cast<sockaddr*>(&destination), sizeof(destination));
    std::cout << n_bytes << " bytes sent" << std::endl;
    ::closesocket(sock);

    // Clean up sockets library
    WSACleanup();

    return 0;

}

原文由 KMcN 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题