gpt4 book ai didi

c++ - 在 C++ 中通过 UDP 发送字符串

转载 作者:IT老高 更新时间:2023-10-28 21:39:07 28 4
gpt4 key购买 nike

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

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

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

最佳答案

网络编程的一个很好的来源是Beej's Guide to Network Programming .下面是一些示例 Unix 代码。

如果这是 Windows 编程:

  • “sock”的类型应该是 SOCKET而不是 int .
  • 使用 closesocket而不是 close
  • #include <winsock2.h>而不是所有那些 unix 头文件

#include <sys/types.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <memory.h>
#include <ifaddrs.h>
#include <net/if.h>
#include <errno.h>
#include <stdlib.h>
#include <iostream>


int resolvehelper(const char* hostname, int family, const char* service, sockaddr_storage* pAddr)
{
int result;
addrinfo* result_list = NULL;
addrinfo hints = {};
hints.ai_family = family;
hints.ai_socktype = SOCK_DGRAM; // without this flag, getaddrinfo will return 3x the number of addresses (one for each socket type).
result = getaddrinfo(hostname, service, &hints, &result_list);
if (result == 0)
{
//ASSERT(result_list->ai_addrlen <= sizeof(sockaddr_in));
memcpy(pAddr, result_list->ai_addr, result_list->ai_addrlen);
freeaddrinfo(result_list);
}

return result;
}


int main()
{
int result = 0;
int sock = socket(AF_INET, SOCK_DGRAM, 0);

char szIP[100];

sockaddr_in addrListen = {}; // zero-int, sin_port is 0, which picks a random port for bind.
addrListen.sin_family = AF_INET;
result = bind(sock, (sockaddr*)&addrListen, sizeof(addrListen));
if (result == -1)
{
int lasterror = errno;
std::cout << "error: " << lasterror;
exit(1);
}


sockaddr_storage addrDest = {};
result = resolvehelper("192.168.0.4", AF_INET, "9000", &addrDest);
if (result != 0)
{
int lasterror = errno;
std::cout << "error: " << lasterror;
exit(1);
}

const char* msg = "Jane Doe";
size_t msg_length = strlen(msg);

result = sendto(sock, msg, msg_length, 0, (sockaddr*)&addrDest, sizeof(addrDest));

std::cout << result << " bytes sent" << std::endl;

return 0;

}

关于c++ - 在 C++ 中通过 UDP 发送字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24559909/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com