基于TCP协议实现Linux下客户端与服务器之间的通信,实现多线程、多进程服务器

TCP是TCP/IP协议族中一个比较重要的协议,这是一种可靠、建立链接、面向字节流的传输,工作在传输层。和TCP相对的不可靠、无链接、面向数据报的协议UDP,了解UDP客户端与服务器之间通信请戳UDP协议实现的服务器与客户端通信

TCP协议建立连接

首先我们通过一个大概的图来了解。
建立
建立连接首先必须是服务器启动,这没什么好说的,服务器为被动方,客户端为主动方,当客户端发起请求建立连接,服务器被动接受,经过上图三次握手建立连接,注意这三次连接都是在操作系统内部实现的。
那么我们就来介绍建立连接的相关API

socket获取通信的文件描述符。

#include <sys/socket.h>
int socket(int domain, int type, int protocol);

端口号的绑定

#include <sys/socket.h>
int bind(int sock, const struct sockaddr* address, socklen_t address_len);

这俩个API在UDP协议实现的服务器与客户端通信中有详细的参数返回值介绍。

作为服务器首先要进行监听

#include <sys/socket.h>
int listen(int socket, int backog);

参数介绍:
socket: 为socket函数返回的文件描述符
backlog: 建立连接过程中等待建立的请求个数
返回值:
成功返回0,失败返回-1;

这里我们再介绍这个backlog参数的含义:
这就相当与我们去银行取钱,到了发现人比较多,这个时候就需要坐在凳子上等,那么这里的凳子就是backlog的含义,就是现在最大的等待处理的个数。

接受请求:

#include <sys.socket.h>
int accept(int socket,  struct sockaddr* address, socklen_t* address_len);

参数:
socket:文件描述符
address:输出型参数,用来接受对方的IP 端口号,是一个结构体。
address_len:是一个输入输出型参数,输入进去为当前address的大小,输出为实际的大小。
返回值:
返回值成功为一个文件描述符,失败为-1;

这里要解释一下,socket不是已经创建出一个文件描述符,怎么还有?
accept的文件描述符,使用来直接进行数据的发送与收取,

  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值