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

Problem with socket code C++ when send and hex message

本文关键字:套接字 代码 C++ 问题 消息 十六进制      更新时间:2023-10-16

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

./main 192.168.2.170 26810000A7

在附件中,我还添加了 PacketSender.In 添加的屏幕截图,我可以说的是,如果我在从终端发出命令后将 recv (( 命令留在代码中,提示将保持挂起状态......相反,如果我在从提示符发出命令后评论 recv ((,它会返回到提示符,但没有做任何事情(所以没有打开灯(。有人有什么想法吗?

在此处输入图像描述

#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。

如果要发送相应的号码,则需要先转换输入。

套接字处理所有非 char* 的内容都非常糟糕,因此最好立即从终端参数发送字符串,并在服务器上执行所有必要的转换。