首页 > 解决方案 > 发送和十六进制消息时套接字代码 C++ 的问题

问题描述

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

./main 192.168.2.170 26810000A7

在附件中,我还添加了在 PacketSender 上制作的屏幕截图。此外,我可以说的是,如果我将 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);

}

标签: c++socketstcphex

解决方案



推荐阅读