[英]How to use the result of snprintf and send from server to client in socket programming C++
我有这个 function 打印字符串的 hmac:
char *print_bits(unsigned char *bits, size_t len)
{
int i;
char buf[64], *put = buf;
for(i = 0; i < len; i++){
put += snprintf(put, 64, "%02x", bits[i]);
}
return put;
}
我想使用 printf 的结果并将其发送到我的客户端应用程序:
char buffer[64]
len = strlen(buffer);
if(len < BUFFERSIZE)
{
gen_hmac_sha256(global_eid, (unsigned char *) buffer, len + 1);
get_hmac_sha256(global_eid, hmac_sha256_out, HMAC_SHA256_LEN);
printf("App.cpp: hmac sha256 hash: ");
char *buffer2 = print_bits(hmac_sha256_out, 32);
printf("\n");
send(new_sock, buffer2, 64, 0);
}
但是, send 不会将结果发送给客户端。 在此先感谢您的帮助。
在您的 function print_bits
中,您将地址返回到局部变量/数组。 这将导致未定义的行为,因为您将指向您不再拥有所有权的 memory 区域,并且其他一些功能/代码可以修改它。
由于您使用的是C++
,因此您可以使用std::string
编写相同的代码。
std::string get_bits_str(unsigned char *bits, size_t len)
{
std::stringstream stream;
for(i = 0; i < len; i++){
stream << std::hex << bits[i] << " ";
return stream.str();
}
std::string buf = print_bits(hmac_sha256_out, 32);
printf("\n");
send(new_sock, buf.c_str(), 64, 0);
使用 snprintf 创建一个缓冲区来保存从 print_bits function 获取的 hmac 字符串,如下所示:
char buf [64];
char *print_bits(unsigned char *bits, size_t len)
{
int i;
for(i = 0; i < len; i++){
snprintf(buf+i*2, 3, "%02x", bits[i]);
}
return buf;
}
然后在主 function 中,使用如下所示的 send() 系统调用从服务器发送到客户端。
len = strlen(buffer);
if(len < BUFFERSIZE)
{
gen_hmac_sha256(global_eid, (unsigned char *) buffer, len + 1);
get_hmac_sha256(global_eid, hmac_sha256_out, HMAC_SHA256_LEN);
printf("App.cpp: hmac sha256 hash: ");
send(new_sock, print_bits(hmac_sha256_out, 32), 64, 0);
}
请注意,hmac 算法本身在英特尔 SGX 内部执行,并未显示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.