网络编程基础

目录:
1 tcp编程基础
2 udp编程基础
3 socket
4 sigio信号以及信号工作流程
5 io多路复用(select,poll,select)

1 简单的tcp服务器编程流程:
服务器流程: socket(), 构建地址,绑定bind(),监听listen(),接收accept(), 数据处理(recv/sned),关闭close
客户端流程:socket(),构建地址,连接connect(),数据处理(send/recv),关闭close
注:三次握手是在accept前就完成。

2 简单udp服务器编程流程:
服务器流程:socket(),recvfrom(fd, addr, buffer,length,0)/sendto(),关闭close
客户端流程:socket(),sendto/recvfrom,close
对于recvfrom不仅能接收数据,还能获取到发送者的地址

udp也可以实现并发。无法通过应用协议标记。而是只能仿照tcp三次握手实现并发。音视频应用较多。udp编程没有复杂的三次握手,四次挥手而省电.大概可以实现10K Level并发

tcp/udp可理解成客户酒店吃饭问题:
人就是fd。对于服务器首先socket()创建一个迎宾员,bind(ip)将迎宾员绑定在那个门,listen()就是迎宾员站在门口等待客人到来店里来吃饭。当有客户到来时候,迎宾员就接收进酒店accept产生一个新的fd(找到一个对应的服务员clientfd)服务客户点菜上酒买单等操作,后面这个客户的所有服务器就跟迎宾员无关了。而对于udp服务器而言:相当于小餐馆,迎宾员和服务员是同一个人。

3 socket含义:
socket网络套接字,其实就是一个数字,或者说称为文件描述符,fd都可以。
socket()函数其实就跟open函数一样打开一个文件,也是拥有io的一些属性。
socket英文单词是插座的意思: fd<----->五元组(sip,sport,dip,dport,协议)
fd加上五元组就是一个socket

4 sigio信号以及信号工作流程
4.1 sigio信号无实际开发意义,主要活在实验室,很难在开源代码中看到。接收到一帧数据应用程序就收到一个sigio信号。
对于udp而言,a) 当网卡接收到一帧数据通知操作系统,b) 再由操作系统的内核网络协议栈向应用程序发送sigio消息。c)应用程序收到sigio消息然后处理对应绑定的回调函数
对于tcp来讲,tcp理论是可行的,实际上不行的,tcp处理的时候,sigio会很多。
在这里插入图片描述
具体代码如下:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>

int sockfd = 0;
void do_sigio(int sig) {
   
	struct sockaddr_in cli_addr;
	int clilen = sizeof(struct sockaddr_in);
	int clifd = 0;
#if 0  //tcp
	clifd = accept(sockfd, (
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰恒谷

你的鼓励是我最大创作动力!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值