前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络编程学习笔记6-TCP正确使用

网络编程学习笔记6-TCP正确使用

作者头像
opencode
发布2022-12-26 14:52:17
1640
发布2022-12-26 14:52:17
举报
文章被收录于专栏:知识同步

正确关闭TCP连接,视频p17

TCP建立的难度小于销毁的难度,服务端建立TCP的难度小于客户端,接收TCP的难度小于发送

TCP缓冲区里还有数据就关闭连接会导致数据丢失

安全关闭TCP的例子

代码语言:javascript
复制
void sender(const char* filename, TcpStreamPtr stream)
{
    FILE* fp=fopen(filename, "rb");
    if(!fp)
        return;
    printf("Sleeping 10 seconds.\n");
    sleep(10);

    printf("Start sending file %s\n", filename);
    char buf[8192];
    size_t nr=0;
    while(nr=fread(buf, 1, sizeof(buf), fp > 0))
    {
        stream->sendAll(buf, nr);
    }
    fclose(fp);
    printf("Finish sending file %s\n", filename);

    //正确关闭TCP连接
    printf("Shutdown write and read until EOF\n");
    sream->shutdownWrite();  //如果不在这关闭写端,会导致TCP会提前关闭
    while(nr=stream->receiveSome(buf, sizeof(buf)) > 0)
    {
        //do something
    }
    printf("All done");

    //接收完文件后再断开TCP连接

}

在传输文件的时候,输入一些数据,将导致tcp连接断开,服务端接收的数据不完整

如果客户端发送完数据后,断开TCP的写服务,可以解决这个问题,在客户端再输入一些数据时不会影响服务端接收文件

完整的传输和不完整的传输流程分别为:

send()->shutdown->read()->close

send()->more data->close() //如果数据没read完将丢失

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档