繁体   English   中英

如何在套接字编程中使用 snprintf 的结果并从服务器发送到客户端 C++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM