zoukankan      html  css  js  c++  java
  • Python学习13

    网络编程

    TCP/IP简介

    IP地址实际上是一个32位整数(称为IPv4),以字符串表示的IP地址如192.168.0.1实际上是把32位整数按8位分组后的数字表示,目的是便于阅读。

    IPv6地址实际上是一个128位整数,它是目前使用的IPv4的升级版,以字符串表示类似于2001:0db8:85a3:0042:1000:8a2e:0370:7334

    TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。

    许多常用的更高级的协议都是建立在TCP协议基础上的,比如用于浏览器的HTTP协议、发送邮件的SMTP协议等

    TCP编程

    客户端

    大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。

    我们要创建一个基于TCP连接的Socket,可以这样做:

    import socket
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(('www.baidu.com',80)) 注意参数是一个tuple,包含地址和端口号。

    AF_INET指定使用IPV4协议,如果要使用IPV6协议就指定为AF_INET6,SOCK_STREAM指定使用面向流的TCP协议,作为服务器,提供什么样的服务,端口号就必须固定下来。由于我们想要访问网页,

    因此新浪提供网页服务的服务器必须把端口号固定在80端口,因为80端口是Web服务的标准端口。其他服务都有对应的标准端口号,例如SMTP服务是25端口,FTP服务是21端口,等等。
    端口号小于1024的是Internet标准服务的端口,端口号大于1024的,可以任意使用。

    建立TCP连接后,我们就可以向百度服务器发送请求,要求返回首页的内容:
    s.send(b'GET / HTTP/1.1 Host: www.baidu.com Connection: close ')


    发送的文本格式必须符合HTTP标准,如果格式没问题,接下来就可以接收新浪服务器返回的数据了:
    buffer=[]

    while True:
    d=s.recv(1024)
    if d:
    buffer.append(d)
    else:
    break
    data=b''.join(buffer)
    接收数据时,调用recv(max)方法,一次最多接收指定的字节数,因此,在一个while循环中反复接收,直到recv()返回空数据,表示接收完毕,退出循环。

    当我们接收完数据后,调用close()方法关闭Socket,这样,一次完整的网络通信就结束了:

    s.close()

    接收到的数据包括HTTP头和网页本身,我们只需要把HTTP头和网页分离一下,把HTTP头打印出来,网页内容保存到文件:

    header, html = data.split(b' ', 1)
    print(header.decode('utf-8'))
    with open('baidu.html', 'wb') as f:
    f.write(html)
    

    现在,只需要在浏览器中打开这个baidu.html文件,就可以看到百度的首页了。

    UDP编程

    TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。

    使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是不一定能不能达到!

    虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。





  • 相关阅读:
    清除浮动的几种方法
    call() 、 apply() 、bind()方法的作用和区别!
    关于如何通过json更改背景图片
    js验证码实现
    解决python3 UnicodeDecodeError: 'gbk' codec can't decode byte
    Rest接口测试,巧用firebug插件
    PHP中字符串的连接和换行
    PHP内置函数file_put_content(),将数据写入文件,使用FILE_APPEND 参数进行内容追加
    PHP的三种输出方式
    PHP中的include、include_once、require、require_once
  • 原文地址:https://www.cnblogs.com/tangmf/p/14120744.html
Copyright © 2011-2022 走看看