【Linux】TCP协议的编程流程

TCP协议

一、定义
TCP协议是面向连接的可靠的字节流服务
TCP协议分为客户端和服务端
服务器是被动通讯,客户端是主动通讯
二、服务器的系统调用
1、方法
(1)int socket();创建一个用于监听客户端连接的网络套接字
原型:

  • int socket(int domain, int type, int protocol)

成功返回套接字的文件描述符,失败返回-1
domain:协议簇 AF_INET
type:具体的协议 SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)
protocol:默认值为0

(2)int bind();将创建的套接字与本端的地址信息进行绑定
原型:

  • int bind(int sockfd,const struct sockaddr * addr, socklen_t addrlen)

成功返回0,失败返回-1
sockfd:使用socket方法创建的套接字描述符
addr:服务器程序的地址信息
addr_len:指定结构体大小

struct sockaddr_in
{
	sa_family_t sin_family;
	unsigned short sin_port;
	struct sockaddr_t sin_addr;
}

(3)int listen();启动监听,不会阻塞
原型

  • int listen(int sockfd, int backlog);

成功返回0,失败返回-1
sockfd:创建并绑定过的套接字描述符
backlog:指定内核创建的用于维护当前客户端连接(还没被accept)的队列(已完成的)大小

(4)int accept();接收一个客户端的连接,返回的是一个客户端连接套接字
原型

  • int accept(int sockfd, struct sockaddr * addr,socklen_t*addrlen);

成功返回与客户端连接的文件描述符,失败返回-1
sockfd:经过listen的监听套接字
addr:用于保存接收到的客户端的地址信息
addrlen:地址结构的长度

(5)int recv/int send();读取数据或者发送数据(read()/write())
recv原型

  • ssize_t recv(int sockfd, void*buf, size_t len, int flags);

send原型

  • ssize_t send(int sockfd, const void*buf, size_t len, int flags);

(6)int close();关闭文件描述符(套接字)
2、伪代码

int main()
{
	int listenfd = socket();
	int res = bind();
	res = listen();
	while(1)
	{
		int clientLinkFd = accept();
		while(1)
		{
			recv()/send();
		}
		close(clientLinkFd)
	}
	close(listenfd);
}

三、客户端的系统调用
1、方法
(1)int socket();创建一个用于整个通讯的套接字
(2)int connect();与服务器程序建立连接
原型
int connect(int sockfd)

成功返回0,失败返回-1
addr:服务器的地址信息

(3)int rev();/int send();读取或发送数据
(4)int close();
2、伪代码

int main()
{
	int sockfd = socket();
	int res = connect();//listen之后,accept之前
	while(1)
	{
		send()/recv();
	}
	close(sockfd);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值