我尝试将十六进制数据发送到另一台设备。编译不会导致错误。但是,当我从终端启动该功能时,什么也没发生,只有灯亮了。我在connect()上放了一个指令,以查看是否有一些连接问题,但是它回答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);
}
您在传递number
的地址时应传递其值。
甚至更好,只需传递hex.data()
或&hex[0]
–复制就没有意义了。