网络编程

作者: jkCodic | 来源:发表于2017-07-03 22:57 被阅读29次

    Http请求与tinyHttpd服务器

    http://www.cnblogs.com/qiyeboy/p/6296387.html

    IP地址分类 C类网络号占三段(24位)
    IP数据报重组:分片发生在路由上 重组在目的主机 数据包首部包含分片信息
    TCP四次握手:SYN建立连接 FIN关闭连接 ACK响应 PSH有DATA数据传输 RST连接重置 首部报文包含内容 URG=1紧急封包

    即时通讯网 http://www.52im.net/thread-33-1-1.html 做一款个人QQ

    Socket编程

    通讯步骤(UDP为主 升级到TCP):
    ①申请socket套接字 skt_fd = socket( AF_INET, SOCK_STREAM, 0);
    /AF_INET:使用IPV4的协议 SOCK_STREAM:使用tcp通信 0:使用标准协议,返回一个针对网络操作钥匙/
    ②服务端
    /绑定IP地址结构体和套接字,实现资源初始化/
    rtv = bind(skt_fd, (struct sockaddr )&skt_addr, sizeof(skt_addr));
    {/
    监听:设置网络最大同时通信数量:2*/
    rtv = listen(skt_fd, 2);

    Paste_Image.png

    }
    客户端
    connect连接 rtv = connect(skt_fd, (struct sockaddr )&skt_addr, sizeof(skt_addr));/skt_addr是IPV4结构体sockaddr_in对象*/

    Paste_Image.png
    1.htonl(INADDR_ANY);//登记本机所有网卡
    ③收rtv = read(clt_fd, buf, sizeof(buf));发rtv=write(skt_fd,buf,sizeof(buf));
    sendto(skt_fd, buf, sizeof(buf),0,(struct sockaddr *)&clt_addr, &len );
    recvFrom
    ④关闭close(skt_fd);

    一个套接字建立一个连接,connect只用使用一次 客户端/服务端都一样
    收发函数send() recv()
    字符串转整数函数:atoi()

    多线程与互斥锁

    对返回的skt_fd操作即可.png

    音视频传输

    延时 包的大小 图像/视频压缩 内/外网
    握手

    并发处理

    1.epoll这种可以支持成千上万tcp并发连接
    2.udp模拟tcp
    3.TCP维持多人同时在线是个问题[1], 涉及到服务器数量,系统调优,编程手段等很多方面
    4.QQ UDP丢包重发机制(缓存MTU设置 头部信息 切包 编号 多线程收发)

    即时聊天架构

    1.登陆过程,客户端client 采用TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有一个TCP连接来保持在线状态。
    2.和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。
    3.如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。

    王者荣耀的网络连接分析
    1.更新-模仿TCP的UDP协议(腾讯自己封装)
    2.TCP UDP协议的深入了解与实践
    3.吸收优点 深入底层

    路由器的通信流程(每层对应的硬件有哪些)
    例:QQ->物理层(网卡,厂商提供) 数据链路层(写网卡驱动 通信协议)
    会话层:登录 加密算法 应用层:QQ界面程序 表示层:解密
    路由器 交换机:①网路层(ip协议,路由:数据发送路径[路由协议(算法)用来解决何种效率最高])②数

    据链路层(安全 效率)
    路由器国内研发主要方向:优化协议 算法 虚拟网卡->软件代替硬件 什么是AP QOS模式,带双

    WAN 下载续传

    路由表-数据结构,算法算出最高效路径

    端口号(0-65535,2个字节,16位二进制,实际从1024开始用,之前有大部分有系统用)

    TCP完整通信过程
    1.创建套接字socket;2.绑定bind;3.监听listen;
    4.对方主动连接connect-接收连接请求accept(会创建新的套接字);
    5.使用新的套接字通信send/write-对方revc/read;
    6.close

    点(广)播例子
    思路:主函数传参 使用线程接收(可分离属性) 内核链表封装客户端列表 信息解析函数 转发消

    息(先遍历内核链表判断客户端是否存在)-服务器相当于中转站
    UDP什么情况用? UDP占有系统资源少,可能会丢包
    TCP是可靠的传输。下载时,telnet时....
    UDP是不可靠传输。视频,语音聊天....

    当你编写的应用软件不想考虑下面的连接是否可靠时用,既认为你发的信息对方一定收到.
    当软件要求很小的延迟的时候使用UDP,但是必须在你软件中实现双方的确认,即你发信息
    以后得想个办法确认对方是否收到了你发的信息.这样的好处是降低了网络的延迟.

    bind的端就叫发送端,谁先接收谁绑定bind bind自己的IP 两边都绑定

    接收端bind后占用解除 sinsize = 1;

    作业:udp两边都绑定 两个项目 TCP广播 试题
    0.发送本地记事本文件给指定客户端

    1.tcp发图片给开发板800*480(Ubuntu控制命令控制图片的显示)-不是挂载
    full-全屏
    half-缩小一半显示

    2.udp广播
    发送端 绑定地址:192.168.1.255

    接收端 不要绑定自己地址 可以绑定255/INADDR_ANY

    四类网络地址(传统32位)-通俗讲解
    A:第一字节网络地址 二三四字节主机地址 0开始
    B:二 10
    C:三 110
    D:

    一般不用0和255
    前三个数第一个不可以是0,其他2个数为0~255任意数,我们就拿最后一个数(也就是Ip二进制后8位

    )来说吧,可用的IP地址一般不是以0或255结尾,以0结尾的一般表示网络地址,255结尾的是广播地

    址,也就是说我们用的IP地址是1~254结尾之间的,这其中以1或254结尾的地址常常会用作网关地址,

    所以我们电脑用的ip后面一般是1253或2254之间的数结尾的。

    4.20下午笔记
    广播 点播 组播 -------区别

    我的学习加经验方法:先自己看API敲一些代码-调试-步步改错-再调试-流程测验-参考案例(教师)

    完善-再测验-记忆-快速使用

    软件项目管理经验 做一个网页即时通讯需要了解什么协议

    IP:网络层协议;
    TCP和UDP:传输层协议;
    HTTP:应用层协议;
    SOCKET:TCP/IP网络的API。
    TCP/IP代表传输控制协议/网际协议,指的是一系列协议。
    TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许

    其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就

    是像HTTP,文件传输协议FTP这样的协议等。
    TCP和UDP是FTP,HTTP和SMTP之类使用的传输层协议。虽然TCP和UDP都是用来传输其他协议的

    ,它们却有一个显著的不同:TCP提供有保证的数据传输,而UDP不提供。这意味着TCP有一个特殊的机

    制来确保数据安全的不出错的从一个端点传到另一个端点,而UDP不提供任何这样的保证。
    HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协

    议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
    记住,需要IP协议来连接网络;TCP是一种允许我们安全传输数据的机制,,使用TCP协议来传

    输数据的HTTP是Web服务器和客户端使用的特殊协议。
    Socket 接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,用以开发TCP/IP网络

    上的应用程序。

    TCP&UDP几种常见IO模型
    1.TCP并发阻塞IO:多线程实现
    多进程实现

    调试时发现无法连接可换端口试试(可能没解除)

    相关文章

      网友评论

        本文标题:网络编程

        本文链接:https://www.haomeiwen.com/subject/azficxtx.html