Linux软件编程:TCP编程

1.通信流程

        发送端                接收端

        socket                socket

                                   bind

                                   listen

        connect              accept

        send                    recv

        close                   close

2.函数接口

        listen

        int listen(int sockfd,int backlog);

        功能:

                监听三次握手连接请求

        参数:

                sockfd:套接字文件描述符

                backlog:尚未处理的连接请求最大等待个数

        返回值:

                成功返回0

                失败返回-1

        accept

        int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);

        功能:处理等待队列中的第一个请求

        参数:

                sockfd:套接字文件描述符

                addr:存放请求方地址信息空间的首地址

                addrlen:请求方地址信息长度

        返回值:

                成功返回新的文件描述符

                失败返回-1

        recv

        ssize_t recv(int sockfd,void *buf,size_tlen,int flags);

        功能:接收数据

        参数:

                sockfd:套接字文件描述符

                buf:存放接收到的数据空间首地址

                len:最大接受字节数

                flags:属性 ,默认为0

        返回值:

                成功返回实际接收到字节数

                失败返回-1

                如果对方退出返回0

        send

        ssize_t send(int sockfd,const void *buf,size_t len,int flags);

        功能:

                发送数据

        参数:

                sockfd:套接字文件描述符

                buf:存放接收到的数据空间首地址

                len:最大接受字节数

                flags:属性 ,默认为0

        返回值:

                成功返回实际发送的字节数

                失败返回-1

        connect

        int connect(int sockfd,const struct sockaddr *addr,socklen_t addrlen);

        功能:发送链接请求

        参数:

                sockfd:套接字文件描述符

                addr:对方的IP地址信息

                addrlen:IP地址大小

        返回值:

                成功返回0

                失败返回-1

3.粘包问题

TCP粘包是指发送方发送若干个数据包到接收方接受时粘成一包,从接受缓冲区看,后一包的数据紧接着前一包数据的尾。

解决方案:

                1.特殊字符作为边界

                2.自定义消息结构体

                3.自定义通信协议(根本解决方案)

                

                

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值