TCP入门基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Rbaggio92/article/details/84672944

一、基本概念
流套接字(SOCK_STREAM):流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错
、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,
原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。


数据报套接字(SOCK_DGRAM):数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程
中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数
据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
二、基本API
        (一)、API介绍
服务器:
1、socket() 创建套接字
2、bind() 绑定socket和端口号
3、listen()监听端口号
4、accept()接收来自客户端的连接请求
5、recv()从socket中读取字符
6、close()关闭socket

客户端
1、socket() 创建套接字
2、connect()连接指定计算机的端口
3、send()向socket中写入信息
4、close()关闭socket

        (二)

1、socket(int domain,int type int protocol)
    domain:协议域 AF_INET,AF_INET6
    type:指定socket类型 SOCK_STREAM 、 SOCK_DGRAM 
        SOCK_STREAM是基于TCP的,数据传输比较有保障。
        SOCK_DGRAM是基于UDP的,专门用于局域网,基于广播
    protocol 指定协议

2、int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) ;

    addr:sockfd的协议地址
    addrlen:地址长度
3、    int listen(int sockfd ,int backlog) ;
    sockfd:要监听的套接字
    backlog:可以排队的最大连接个数
    (思考socekt主和被动的情况)
4、int accept(int sockfd, struct sockaddr *addr, socklen_t *addrl addrlen) ;
    sockfd:服务器的socket描述字
    addr 用来返回客户端协议地址
    addrlen 协议地址长度
    处理连接请求后,accept 将返回新的套接字描述符。将此新的套接字连接到客户端

    区分下监听套接字和已连接套接字。监听套接字,一直存在,直到该服务器关闭。
    同时内核为每一个客户端创建一个已连接套接字,当客户端完成某客户服务时,关闭
    这个套接字
    
5、read和write函数
    ssize_t read(int fd, void *buf, size_t count);
    当读取成功时,返回实际所读到的字节数返回值为0 表示读到了文件的结束,
    小于0表示错误,如果错误为EINTR表示读是由中断引起的,如果是 ECONNREST 
    表示网络连接出了问题
    三个参数
    ① socket 描述宇 fd ; ②缓冲区 buf; ③缓冲区长度 count。
    write()的函数原型是:
    
    ssize_t write(int fd, const void *buf, size_t count);

    失败返回-1,成功返回写的字节数,小于0 ,表示有问题
    如果错误为 EINTR 表示在写的时候出现了中
    断错误。 如果为 EPIPE 表示网络连接出现了问题(对方已经关闭了连接)

    3 个参数分别是:
    ① fd 表示 socket 描述字;② buf表示缓冲区; ③ count 表示缓冲区长度 。

6、close函数
    close(fd)
    这个fd是为客户端创建的套接字

猜你喜欢

转载自blog.csdn.net/Rbaggio92/article/details/84672944