c++ - 发送错误:错误地址
问题描述
我正在尝试通过本地主机中的 TCP 套接字发送一些数据(加密材料)。所以我首先发送数据的大小,它运行良好。然后我发送真实数据。它开始很好,我的服务器得到了一些,但过了一段时间,它崩溃了
发送错误:地址错误
*** `/home/stagiaire031/Bureau/HElib-master/src/server' 中的错误:free():
下一个尺寸无效(正常):0x0000000000882cc0 ***
我试图通过 valgrind 获取一些信息,但我只得到了这个:
--7732-- VALGRIND 内部错误:Valgrind 收到信号 11 (SIGSEGV) - 正在退出 --7732-- si_code=128; 故障地址:0x0;sp: 0x803426e30
valgrind:“不可能”发生了:被致命信号杀死
主机堆栈跟踪:==7732== 在 0x38091C12:???(在 /usr/lib/valgrind/memcheck-amd64-linux 中)
==7732== 由 0x38050E84: ??? (在 /usr/lib/valgrind/memcheck-amd64-linux 中)
==7732== 由 0x380510A9: ??? (在 /usr/lib/valgrind/memcheck-amd64-linux 中)
==7732== 由 0x380D4F7B: ??? (在 /usr/lib/valgrind/memcheck-amd64-linux 中)
==7732== 由 0x380E3946: ??? (在 /usr/lib/valgrind/memcheck-amd64-linux 中)
调度状态:running_tid=1
我真的不习惯 valgrind,我发现关于这个错误的唯一事情就是这个,但我没有在我的代码中找到可以在缓冲区之前或之后写入的地方。
另一个奇怪的事情是,有时我的服务器在崩溃之前获得的数据比其他时间多。
这是服务器的相关代码:
char *buffer = 0;
buffer = new char[4096];
stringstream s2;
s2.str();
long n = recv(newsockfd, buffer, 50, 0);
cout << buffer << endl;
double size = stod(buffer, nullptr);
cout << "i receive this size of message : " << n << endl;
n = 0;
int i = 0;
cout << "we wait the message" << endl;
while (i < size)
{
n = read(newsockfd, buffer, size);
if (n < 0)
{
cout << "we got a receive error" << n << endl;
perror("Send error");
}
else
{
cout << "concatenate strings" << endl;
s2 << *buffer;
cout << "we receive " << n << " and all : " << i << endl;
i += n;
}
bzero(buffer, 4096);
}
这是给客户的:
n = send(sockfd, s2.str().c_str(), 10, 0);
cout << "context size " << s1.str().length() << endl;
n = 0;
int i = 0;
while (i < s1.str().length())
{
n = send(sockfd, s1.str().c_str(), s1.str().length() - i, 0);
if (n < 0)
{
perror("Send error");
}
else
{
cout << "end of a turn... we send " << n << endl;
i += n;
s1.str() += n;
}
}
我已经查看了一些关于套接字错误的帖子,例如this、this或this。他们以前帮助过我,但似乎不足以解决我目前的问题。
感谢大家的帮助!
解决方案
推荐阅读
- java - 为什么我的方法 removeDuplicates() 不返回没有重复项的链接列表?
- java - 哈韦 来自jframe的扩展类问题
- javascript - 如何使用 Express & GULP 编译和控制 PUG 文件
- ruby-on-rails - 如何每天查找具有最大值(在关联模型中定义)的记录
- istio - Istio 1.1 Envoy 访问日志没有出现
- ios - 如何在目标 c 中正确使用接口作为 DTO
- sql-server - SSIS 派生列表达式根据单独 OLE DB 源中另一个字段的值显示空白
- php - 某些页面上的标题对齐问题?
- c# - 试图更好地理解共享项目并在不同的解决方案中使用它们
- ssl - 详细信息:来自 http://simca.tech/.well-known/acme-challenge/Kmjz6pdfz91ubRRrE_AL-qQ5Z-1FB7vfM3WSt6xuul8 的无效响应