• socket、tcp/ip协议、udp协议


    转载:https://www.cnblogs.com/xiaowenshu/p/9916755.html

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

    socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。 socket就是该模式的一个实现,socket是一种特殊的文件,一些socket函数就是对其进行的操作(打开、读/写IO、关闭)。

    socket和file的区别:

    文件是都是在同一台计算机上,两个进程之间传输数据。

    socket可以实现在不同的计算机之间传输数据,也就是网络传输数据。比如说qq、打开一个网页,这些都是socket来实现通信的。

    那网络通信呢又要说到tcp/ip协议和udp协议,socket里面已经封装好了upd和tcp/ip协议,直接使用就可以了。

    简单说下tcp/ip协议是干嘛的,网络刚出来的时候,一片混乱,那要传输数据就得大家都遵守一个规则,大家都按照这个,然后就出现了tcp/ip协议。也许你听过3次握手,4次断开,说的就是tcp/ip连接的一个过程。加入a计算机要和b计算机通信,过程是这样的

    a:在吗,我可以连你吗
    b:在,你连吧
    a:好的,我要给你发数据了

    #这就是3次握手,这就建立好通道了,两台计算机就可以进行通行了。

    那么4次断开是什么呢

    a:我要和你断开了
    b:好的,你断开吧
    b:关闭通道
    a:关闭通道

    为什么关闭2次呢,因为两端要互相传数据,挖了两条路,一条路用来b给a传数据,另外一条是a给b传数据,所以是2次关闭,各自关闭各自的通道。这两条路呢,就有个次叫全双工,就是两边都可以互相发送数据,如果只有一端可以发送数据,那就叫单工。

    下面这个图,就可以看到建立连接的过程和传输数据的过程,以及断开的过程。

    而udp协议就比较简单了,没有那么复杂的断开和连接,不需要3次握手,不需要确定客户端、服务端是否能收到,tcp/ip是必须建立好连接之后,才能发数据,而udp是无连接的,知道ip和端口号直接就是发,它比tcp/ip快,但是不安全。

    upd就像写信一样,有可能在路上就没有了,对方没有收到。而tcp/ip就像打电话一样,必须得接通才能说话。

    下面是udp server端的代码:

    下面是client端的代码

    先运行server端的代码再运行client的向server端发送数据,server端再返回数据,做一个简单的聊天的小程序,结果如下

    下面是tcp/ip协议的代码,server端代码:

    #下面是客户端连接服务端的代码

    大家可能会想,学这个有啥用呢,其实这些web框架底层就是这么实现的,比如说django、flask这些,会了socket,我们也可以自己开发一个web框架。当然现在只能一次给一个客户端服务,用了多线程或者多进程就可以为多个客户端来服务了。

    服务端运行结果

    下面用多线程,每次有客户端连过来就启动一个线程来服务,这样就可以为多个客户端服务了,用threading模块启动一个线程,来一个请求就启动一个线程为他服务,代码如下:

  • 相关阅读:
    [luogu P2184] 贪婪大陆 [树状数组][线段树]
    luogu P3373 【模板】线段树 2
    [luogu P3384] 【模板】树链剖分 [树链剖分]
    树链剖分膜版
    AtCoder Grand Contest 026F
    AtCoder Regular Contest 091F
    AtCoder Regular Contest 099F
    AtCoder Grand Contest 027D
    向量叉积分配律简单证明
    LOJ 538. 「LibreOJ NOIP Round #1」数列递推(找规律+结论)
  • 原文地址:https://www.cnblogs.com/renjiaqi/p/11371318.html
Copyright © 2020-2023  润新知