发送错误:地址错误

时间:2018-06-28 09:59:10

标签: c++ sockets c++11 tcp

我正在尝试通过本地主机中的TCP套接字发送一些数据(加密材料)。 所以我先发送数据的大小,并且效果很好。然后我发送真实数据。它启动正常,我的服务器收到了一些,但是一段时间后,它崩溃了,给我

  

发送错误:地址错误

     

***`/ home / stagiaire031 / Bureau / HElib-master / src / serveur'中的错误: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,关于此错误的唯一发现是this,但是在代码中找不到在缓冲区之前或之后可以写的地方。 / p>

另一个奇怪的事情是,有时我的服务器在崩溃前比其他时间获得更多的数据。

这是服务器的相关代码:

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;
    }
}

我已经查看了一些有关套接字错误的信息,例如thisthisthis。他们曾经帮助过我,但似乎不足以解决我当前的问题。

感谢大家的帮助!

0 个答案:

没有答案