– 服务器:
1、创建socket -> int socket(int domain, int type, int protocol);
- domain:协议域,决定了socket的地址类型,IPv4为AF_INET。
- type:指定socket类型,SOCK_STREAM为TCP连接。
- protocol:指定协议。IPPROTO_TCP表示TCP协议,为0时自动选择type默认协议。
2、绑定socket和端口号 -> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
- sockfd:socket返回的套接字描述符,类似于文件描述符fd。
- addr:有个sockaddr类型数据的指针,指向的是被绑定结构变量。
- addrlen:地址长度。
// IPv4的sockaddr地址结 构
struct sockaddr_ in {
sa_ family_ t sin_ family;//协议类型,AF_ INET
in_ port_ _t sin_ _port; // 端口号
struct in_ addr sin_ _addr; // IP地址
};
struct in_ addr {
uint32_ t s_ addr;
}
3、监听端口号 -> int listen(int sockfd, int backlog);
- sockfd:要监听的sock描述字。
- backlog:socket可以排队的最大连接数。
4、 接收用户请求 -> int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
- sockfd:服务器socket描述字。
- addr:指向地址结构指针。
- addrlen:协议地址长度。
注:一旦accept某个客户机请求成功将返回一个全新的描述符用于标识具体客户的TCP连接。
5、从socket中读取字符 -> ssize_t read(int fd, void *buf, size_t count);
- fd:连接描述字。
- buf:缓冲区buf。
- count:缓冲区长度。
- 注:大于0表示读取的字节数,返回0表示文件读取结束,小于0表示发生错误。
6、关闭socket -> int close(int fd);
- fd:accept返回的连接描述字,每个连接有一个,生命周期为连接周期。
- 注:sockfd是监听描述字,一个服务器只有一个,用于监听是否有连接;fd是连接描述字,用于每个连接的操作。
– 客户机:
1、创建socket -> int socket(int domain, int type, int protocol);
2、连接指定计算机 -> int connect(int sockfd, struct sockaddr * addr, socklen_t addrlen);
- sockfd客户端的sock描述字。
- addr:服务器的地址。
- addrlen:socket地址长度。
3、向socket写入信息 -> ssize_t write(int fd, const void *buf, size_t count);
- fd、buf、count:同read中意义。
- 大于0表示写了部分或全部数据,小于0表示出错。
4、关闭oscket -> int close(int fd);
- fd:同服务器端fd
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99807.html