套接字编程问题,退出时发送数据

mikae10j

我在OS X(C ++)上进行套接字编程时遇到问题。我的客户端可以连接到服务器,但是尽管send()不会失败,但我发送数据时,仅在程序退出时才发送数据。

这是我的代码:

在客户端构造函数中创建套接字并与服务器建立连接:

ComBridge::ComBridge(std::string comManagerIP, int portNumber){
    this->myComManagerIP = comManagerIP;
    this->portNum = portNumber;

    initComBridge();
}

ComBridge::~ComBridge(){
   close(socketFD);
}

void ComBridge::initComBridge(){
    /*Opening the socket*/
    socketFD = socket(AF_INET, SOCK_STREAM, 0);
    if (socketFD<0) {
        cout<<"Error opening socket !"<<endl;
        exit(1);
    }

    /*Defining the server address*/
    bzero((char *) &server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    /*bcopy(myComManagerIP.c_str(),
      (char *)&server_addr.sin_addr.s_addr,
      myComManagerIP.size());*/
    inet_pton(AF_INET,myComManagerIP.c_str(),&server_addr.sin_addr);
    server_addr.sin_port = htons(portNum);

    cout<<"ip server store : "<<myComManagerIP.c_str()<<endl;

    cout<<"ip server in server_addr: "<<server_addr.sin_addr.s_addr<<endl;

    /*Connecting to ComManager*/
    int rcon = connect(socketFD, (struct sockaddr*)&server_addr, sizeof(server_addr));
    cout<<"back num for connection : "<<rcon<<endl;
    if (rcon<0) {
        cout<<"Failed connection to ComManager !"<<endl;
    }
}

以及发送和接收方法:

void ComBridge::readMessage(){
    bzero(bufferIn,256);

    /*Waiting for data from socket*/
    ssize_t numOfCharRecv = recv(socketFD, &bufferIn, 255,0);
    //ssize_t numOfCharRecv = read(socketFD,&bufferIn,255);

    if (numOfCharRecv < 0)
        cout<<"ERROR reading socket"<<endl;

    /*Storing the string received in a jsonDocument*/
    jsonDocument.Parse(bufferIn);
    cout<<"message : "<<bufferIn<<endl;
    /*Notifying observers of event*/
    //notify(jsonDocument);
}

void ComBridge::writeMessage(rapidjson::Document& d){
    buffer = myJsonHandler.convertJsonToString(d);

    cout<<buffer<<endl;

    ssize_t writeRes = send(socketFD,buffer.c_str(),strlen(buffer.c_str())+1,0);
    if (writeRes < 0)
        cout<<"ERROR writing to socket"<<endl;
    else cout<<"Message sent ! "<<writeRes<<endl;
}

调用readMessage和writeMessage的更新方法:

void ComBridge::update(rapidjson::Document& d){

    /*If the message is for the ComManager*/
    if (!d.HasMember("To")) {
        rapidjson::Value myVal;
        /*Adding the comManager IP*/
        myVal.SetString(myComManagerIP.c_str(), d.GetAllocator());
        d.AddMember("To", myVal, d.GetAllocator());
    }

    /*Sending message*/
    writeMessage(d);

    /*Waiting for answer*/
    //readMessage();

}

有谁知道出什么问题了吗?

感谢帮助 !

Mikael10j

用户名

这通常发生在您读行而不写行时。这导致行读取方法阻塞,直到:

  • 收到行终止符
  • 流结束
  • 发生错误。

并不是在程序退出之前不发送数据,而是在出现行终止符或流结束之前,行读取方法直到流结束才返回。如果发送方没有发送线路终止符,则在关闭套接字之前不会发生任何事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从结构发送数据,套接字编程

来自分类Dev

解决套接字编程问题

来自分类Dev

通过Java套接字发送小文件时的性能问题

来自分类Dev

通过UDP套接字发送消息时遇到问题

来自分类Dev

套接字send()函数在发送数据时失败

来自分类Dev

在发送数据时设置Python套接字的超时

来自分类Dev

仅在发送 python 套接字时接收数据

来自分类Dev

套接字无法发送数据

来自分类Dev

Java套接字发送数据

来自分类Dev

套接字无法发送数据

来自分类Dev

Java套接字发送数据

来自分类Dev

当套接字发送的数据快于其处理速度时,套接字将如何操作?

来自分类Dev

C ++ Windows套接字-在程序退出时关闭套接字

来自分类Dev

iOS套接字编程中的套接字响应问题

来自分类Dev

通过套接字发送文件时如何给出符号并退出不定式循环

来自分类Dev

套接字编程设计问题

来自分类Dev

套接字编程Python While和If问题

来自分类Dev

使用C ++进行的Unix套接字编程,recv返回0,但仍在接收数据,但有时接收的内容比发送的要多

来自分类Dev

发送请求时,nodejs套接字挂断

来自分类Dev

Java Tcp套接字发送额外的数据?

来自分类Dev

套接字sendall()不发送数据

来自分类Dev

套接字-UDP通过Internet发送数据

来自分类Dev

通过套接字发送数据异常中止

来自分类Dev

套接字中的数据发送错误

来自分类Dev

套接字发送在终端中输入的数据

来自分类Dev

套接字两次发送数据

来自分类Dev

通过UDP套接字发送数据

来自分类Dev

通过套接字发送数据异常中止

来自分类Dev

TCP套接字复用发送大数据