gpt4 book ai didi

c++ - 发送和十六进制消息时套接字代码 C++ 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:31:55 24 4
gpt4 key购买 nike

我尝试将十六进制数据发送到另一台设备。编译不会导致错误。但是,当我从终端启动该功能时,什么也没有发生,但应该亮起一盏灯。我在 connect () 上放置了一个 cout 以查看我是否有一些连接问题但它回答 0(所以我没有问题)也许这就是我编写十六进制代码的方式?除了代码之外,我还插入了使用十六进制代码执行的命令行。奇怪的是,如果我使用具有相同参数的任何程序(如 PacketSender),它都能正常工作。

./main 192.168.2.170 26810000A7

在附件中,我还添加了在 PacketSender 上制作的屏幕截图。此外,我可以说的是,如果我在代码中保留 recv () 命令,一旦我从终端发出命令,提示将保持未决状态...如果相反我对 recv () 进行了注释,一旦我从提示中发出命令,它就会返回到提示但什么都不做(因此没有打开灯)。有人有什么想法吗?

enter image description here

#include <stdio.h>
#include <errno.h>
#include <string>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <cstring>
#include <unistd.h>
#include <iostream>
#include <unistd.h>

using namespace std;

// per compilare gcc connect_PE.cpp -lstdc++ -o main
int main(int argc, char *argv[])
{
int sockfd, n;
struct sockaddr_in servaddr;

std::string serveraddr = argv[1];

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(serveraddr.c_str());
servaddr.sin_port = htons(9761);

connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
cout << connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
const std::string hex = argv[2];

char *number = strcpy(new char[hex.length() + 1], hex.c_str());


send(sockfd, &number, 8, 0);
recv(sockfd, &number, 8, 0);

}

最佳答案

当您应该传递 时,您却传递了 number地址

或者甚至更好,只需传递 hex.data()&hex[0] —— 复制它没有意义。

另请注意,您发送的是一串字符,而不是十六进制形式的数字。
(第一个 char 不是 0x26 - 即 38 - 但 '2',可能是 50。)

如果要发送对应的数字,需要先对输入进行转换。

关于c++ - 发送和十六进制消息时套接字代码 C++ 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58354828/

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