发送和十六进制消息时套接字代码C++问题
Problem with socket code C++ when send and hex message
我尝试将十六进制数据发送到另一台设备。编译不会导致错误。但是当我从终端启动该功能时,没有任何反应,但灯应该亮起。我在连接((上放了一个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* 的内容都非常糟糕,因此最好立即从终端参数发送字符串,并在服务器上执行所有必要的转换。
相关文章:
- 一个非常简单的win32套接字代码,但工作错误
- boost::asio-async_read_some示例代码没有读取套接字中的所有数据
- 调试套接字 c++ 代码并帮助我理解
- 发送和十六进制消息时套接字代码C++问题
- 当我使用套接字代码发送第二条消息时,我有一个"sendto() Invalid argument"
- 在 ZeroMQ 中绑定订阅者套接字并连接发布者套接字会在代码运行时给出错误.为什么
- 为什么从我的代码中removig textbox.appendtext()在此处更改套接字通信
- 根据C++代码在 PHP 中创建字节数据并将其传递给套接字
- Windows 套接字编程 - 错误代码 0
- 使用 CAsynSocket,如何捕获套接字操作的退出代码?
- 如何将C++套接字编程代码转换为C#
- 当服务器重新启动并且客户端收到WSAECONNRESET错误代码时,我应该重新创建整个套接字吗
- 创建一个原始套接字 - Debian + 代码块
- 编译使用 libcxx 的套接字函数 bind() 的代码失败
- 是什么导致了我在套接字代码上的编译错误,以及我如何修复它
- C++套接字编程:sendto()和recvfrom()错误代码10038和in 'server'绑定失败,10038
- 没有多线程的c++套接字不同步/并行代码
- 无法通过windows UDP套接字发送数据:错误代码10035
- 简单UDP套接字代码,发送和接收消息
- 带超时的多线程面向对象套接字代码