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

问题描述 投票:0回答:1

我尝试将十六进制数据发送到另一台设备。编译不会导致错误。但是,当我从终端启动该功能时,什么也没发生,只有灯亮了。我在connect()上放了一个指令,以查看是否有一些连接问题,但是它回答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);

}
c++ sockets tcp hex
1个回答
0
投票

您在传递number地址时应传递其

甚至更好,只需传递hex.data()&hex[0] –复制就没有意义了。

© www.soinside.com 2019 - 2024. All rights reserved.