gpt4 book ai didi

c++ - 为什么在这个 ssl 写入过程中 char 数组的第一个字母被截断了?

转载 作者:行者123 更新时间:2023-11-28 05:27:55 25 4
gpt4 key购买 nike

我在 c 中使用 TCP 套接字,并通过网络将数据发送到另一台使用 SSL 加密的机器。但是,由于某种我似乎无法弄清楚的原因,写入套接字的句子的第一个字母被截断了。

服务器端程序正在使用以下行将数据写入套接字:

err = SSL_write (ssl, "This is a message", strlen("This is a message"));

客户端上的以下函数用于从套接字 (vb.net) 检索数据:

Public Function TCPRead(ByVal SecureSocket As SslStream)
Dim bytes(SecureSocket.ReadByte) As Byte

SecureSocket.Read(Bytes, 0, Bytes.Count)

Return Encoding.ASCII.GetString(Bytes)
End Function

但是客户端的socket返回的字符串是:

his is a message

ssl_write ( https://linux.die.net/man/3/ssl_write) 的手册说:

SSL_write() writes num bytes from the buffer buf into the specified ssl connection.

那么上面的 C 代码肯定会写出上面句子中的字符等于字符数组中字母的数量吗?

我担心这可能是我看不到的非常愚蠢的事情。

谢谢

最佳答案

我的基础很薄弱,但我有一种不好的感觉,你在这里消耗了消息中的第一个字节:Dim bytes(SecureSocket.ReadByte) As Byte,试图将其用作消息的大小。

C 和 C++ 不会在第一个字节中公布字符串长度。它们用空字符标记字符串的结尾。 strlen 通过读取和计数直到找到空字符来计算字符串的长度。

如果你想在前面加上长度,你必须做类似的事情

const char* msg = "This is a message";
uint8_t len = strlen(msg); // note: this will fail hilariously
// if the string is greater than 255 characters
SSL_write (ssl, &len, sizeof(len)); // note - totally ignoring errors here
SSL_write (ssl, msg, len);

如果 C++ 摆在桌面上,并且它已被标记,那么它最好是,

std::string str = "This is a message";
uint8_t len = str.length(); // note: this will fail hilariously if the string
// is greater than 255 characters long
SSL_write (ssl, &len, sizeof(len)); // note - totally ignoring errors here
SSL_write (ssl, str.c_str(), len);

关于c++ - 为什么在这个 ssl 写入过程中 char 数组的第一个字母被截断了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40165012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com