小火车协议

typedef struct train_s{
    int dataLength;//发送的长度
    char buf[1000];//发送的内容
}train_t;
ret = send(pTask->netFd,&t,sizeof(t.dataLength)+ t.dataLength,MSG_NOSIGNAL);
//自定义的接收函数
int recvn(int netFd, void *p, int n)
{
    int total = 0;
    int ret;
    char *pTmp = (char *)p;
    while (total < n)
    {
        //可能传输不稳定,while循环保证一定收满n大小
        ret = recv(netFd, pTmp + total, n - total, 0);
        ERROR_CHECK(ret, -1, "recv");
        total += ret;
    }
    return 0;
}
//一次发送两次接收
    int ret = recvn(pTask->netFd, &dataLength, sizeof(int)); //先收火车头
    ERROR_CHECK(ret, -1, "recv");
    ret = recvn(pTask->netFd, name, dataLength); //再收火车内容
    ERROR_CHECK(ret, -1, "recv");

 

posted @ 2022-03-22 19:26  晓风霜度-  阅读(287)  评论(1)    收藏  举报