在C/C++中通过TCP套接字发送十六进制
Sending hex over a TCP Socket in C/C++
我在使用TCP套接字发送十六进制值时遇到困难。具体来说,我想通过套接字发送一个十六进制值(如0x123456),这样我想要的值就是TCP数据发送,而不是ASCII表示。我目前只能将我想要的值作为ASCII字符串发送,任何通过套接字发送十六进制值的帮助都将不胜感激。
下面是我写的代码:
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <cstring>
#include <string>
#include <unistd.h>
using namespace std;
int main(int argc, char**argv) {
int sockfd, n;
struct sockaddr_in servaddr;
char sendline[1000];
char recvline[1000];
std::string serveraddr = "127.0.0.1";
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(serveraddr.c_str());
servaddr.sin_port = htons(1234);
connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
int number = 0x123456;
int sendsize;
sendsize = snprintf(sendline, sizeof(sendline), "%x", number);
send(sockfd, sendline, sendsize * sizeof(char), 0);
}
您可以send()
任何您想要的数据,它不必是字符串。套接字操作原始字节,而不是文本。所以你可以直接发送你的号码:
int number = 0x123456;
send(sockfd, (char*)&number, sizeof(number), 0);
与读数相同:
int number = 0;
recv(sockfd, (char*)&number, sizeof(number), 0);
话虽如此,多字节号码按网络字节顺序传输是惯例(但不是必须的):
int number = htonl(0x123456);
send(sockfd, (char*)&number, sizeof(number), 0);
int number = 0;
recv(sockfd, (char*)&number, sizeof(number), 0);
number = ntohl(number);
相关文章:
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- C++ TCP 套接字 | 无法将"std::__cxx11::字符串"转换为"const
- ASIO 的 TCP 套接字::async_wait() 并在此之后关闭套接字
- Visual Studio(C++):如何使用TCP套接字发送多个值
- TCP套接字(客户端-服务器)recv()返回-1值
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- C++中TCP套接字的recv函数
- 通过 TCP 套接字发送大型 base64 字符串
- 提升 ASIO TCP 套接字 1.70 不向后兼容
- 尝试连接到 TCP 套接字 (Linux) 时连接被拒绝
- 仅通过建立一次TCP连接将Recv从客户端发送到服务器套接字
- 如何知道请求是否完全使用 TCP 套接字接收?
- Qt TCP 套接字 - 写入超过 15 个字节
- 要打开以供C++中的应用程序最佳使用的并行套接字/TCP连接数
- C++ 如何通过套接字 (TCP) 进行二进制序列化
- 套接字 TCP 服务器程序问题
- Cpp套接字-TCP传输(使用同一端口发送,然后接收)