建立TCP服务器的各个系统具体的调用过程

导读:本篇文章讲解 建立TCP服务器的各个系统具体的调用过程,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

在这里插入图片描述

– 服务器:
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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!