Linux 网络开发

Socket

Socket套接字 就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。 为了完成网络应用程序开发(局域网,广域网)系统提供的一组函数接口。

socket pair 标示网络中的多个socket链接和通信关系。

//socket创建 ip版本 传输协议  SOCKET_DGRAM|| SOCK_STREAM
int socketfd = socket(AF_INET6, SOCKET_STREAM, 0);

sockaddr_in

sockaddr 初始化网络信息

struct sockaddr_in addr 网络信息结构体
	
	addr.sin_family = AF_INET or AF_INET6 	// 协议族 ipv4 ipv6
	addr.sin_port = 8000.  //端口号
	addr.sin_addr.s_addr = 192.168.1.1 //ip地址

bind(server端)

绑定网络信息和套接字
服务器端需要进行绑定 而客户端不需要(客户端使用connect直接进行连接)

bind(SOCKET socket, (struct sockaddr *)&serveraddr, sizeof(serveraddr));

listen(server端)

**listen设置监听队列:**设置监听队列存储socket,对设置队列大小的socket进行监听。

listen(SOCKET sockfd, int size (128));

accept(server端)

服务器等待连接:让服务器处于阻塞状态,等待客户端socket连接之后才能继续运行。

返回服务器的socket    被连接服务器的套接字 传出服务器网络信息和网络信息大小
struct sockaddr_in clientaddr;
socklen_t clientsize = sizseof(clientaddr);
SOCKET clientfd = accept(SOCKET sockfd, (struct sockaddr *)&clientaddr, &clientsize);

connect(client端)

客户端请求连接服务器:根据设置的网络信息连接服务器。(无需bind)

connect(SOCKET clientfd, (struct sockaddr *)&sockaddr, sizseof(sockaddr));

recv send

向对方发送或接收信息: 根据传入的socket确定接受或发送方

//发送时一般为字符串真实大小
//接收时一般为定义的字符串的长度

int length;
length = recv(SOCKET socket, char * buf, int len, 0);
send(SOCKET, socket, char * buf, length, 0);

/*
	为了防止TCP粘包问题 
	发送端		先发送包的大小 然后再发送包的内容 
	接收端		先接受包的大小 定义接受数据包偏移量 若数据包过大则需要多次接收
*/



I/O多路复用

select

经典的I/O多路复用模型

pool

类 select 模型

epool

较为高效的模型,使用红黑树作为遍历方式

//水平触发 默认方式 需要处理完所有的就绪信息才可以继续下一次的监听
//边沿触发 高效的工作方式 就绪只会通知用户一次 可以不处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值