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

在这里插入图片描述

- 服务器:
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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值