美文网首页
Python基础-day17

Python基础-day17

作者: 陈small末 | 来源:发表于2019-01-12 14:41 被阅读0次

    一、网络编程

    1.网络编程基础

    1.1概念

    计算机网络:把分布在不同区域的计算机【设备】与专门的一些外部设备通过通信线路相关联,形成一个网络系统,从而使得计算机之间可以共享数据

    网络编程:同一个网络中不同的机器之间的通信

    1.2计算机之间需要通信的必要条件

    ip地址,端口,网络协议

    1.>ip地址

    ​ 互联网协议地址【Internet Protocol Address】,是联网设备和互联网之间的唯一标识,在同一个网段中,ip地址是唯一的

    ​ ip地址是数字型,是一个32位的整数,

    ​ 举例:10.36.131.32:32位的整数,分成4个8位的二进制,将二进制转换为0~255之间的十进制整数

    ​ 分类:

    ​ a.形式分类

    ​ ipv4:分为4段

    ​ ipv6:分为6段

    ​ b.功能分类

    ​ A类:保留给政府机构,1.0.0.1~126.255.255.255

    ​ B类:分配中型企业,128.。。。。~191.。。

    ​ C类:分配个人,192...~223

    ​ D类:组播,224~239

    ​ E类:实验,240~255

    ​ 127.0.0.1:回送地址,一般指的是本机的ip,localhost,一般用来进行测试

    ​ 总结:ip地址可以唯一确定网络上的一个通信实体,但是一个通信实体上可能有很多的应用程序,可以同时提供网络服务,此时还需要借助于端口进行区分

    2>端口

    ​ 数据的发送和接收都需要通过端口,端口号用于唯一标识通信实体上进行网络通信的程序

    ​ 注意:同一台机器上的不同的应用程序不能占用同一个端口,端口的范围:0~65535

    ​ 作用:ip地址结合端口号,就可以唯一的确定一个网络中唯一一台计算机上的一个应用程序

    ​ 分类:

    ​ a.公认端口:0~1023

    ​ b.注册端口:1025~49151

    ​ c.动态端口或者私有端口:1024~65535

    ​ 常用端口:

    ​ mysql: 3306

    ​ oracle:1521

    ​ tomcat:8080

    ​ qq:4000

    3>网络协议

    ​ http: 被动式协议

    ​ tcp

    ​ udp

    ​ tcp/ip:互联网协议

    2.TCP编程

    Transmission Control Protocol,传输控制协议,是一个传输层的通信协议

    客户端/服务端:套接字【socket】,程序通常通过套接字向网络发出请求或者应答网络请求,使得两台设备之间进行通信

    理解;打开了一个网络连接,必须知道ip地址,端口号,协议

    ​ 特点:

    ​ a.安全的【确保接收方完全正确的接收数据】

    ​ b.面向连接【数据传输之前必须要建立连接】

    ​ c.传输的效率较低【面向连接需要耗时】

    ​ d.一旦连接建立,双方可以按照指定的格式发送数据【大小没有限制】

    使用经典三次握手建立连接

    ​ a.客户端向服务端发起请求

    ​ b.服务端收到请求之后,会给客户端一个响应

    ​ c.客户端收到服务端的响应之后,给服务端回复一个确认信息

    2.1socket通信流程

    代码演示:

    server:

    #服务端流程描述
    import  socket
    
    #1.创建服务端的socket对象
    serverSocket = socket.socket()
    
    #2.为socket绑定端口和ip地址
    """
    bind(元组),将端口号和ip地址创建元组,然后传参
    (host,port)
    """
    #查看ip地址:在终端输入ipconfig命令
    ip_port = ("10.36.131.32",6666)
    serverSocket.bind(ip_port)
    
    #3.服务端监听请求,随时准备接受客户端发来的连接
    """
    listen(backlog)
    backlog:在拒绝连接之前,可以挂起的最大连接数量
    注意:不能无限大
    """
    serverSocket.listen(5)
    
    print("server waiting~~~~~")
    
    #4.服务端接收到客户端的请求,被动打开进行连接
    #accept();在连接的时候,会处于阻塞状态
    #返回值:conn,address,conn表示连接到的套接字对象,address表示连接到的客户端的地址
    conn,addr = serverSocket.accept()
    
    #5.服务端接收消息
    """
    recv(size)
    可以一次性接收到多大的数据
    """
    client_data = conn.recv(1024)
    print(str(client_data,"utf-8"))
    
    #6.服务端关闭
    serverSocket.close()
    

    client:

    import  socket
    
    #1.创建socket对象
    clientSocket = socket.socket()
    
    #2.发起连接请求
    #connect(元组)
    #(host,port)ip地址和端口号需要和服务端中绑定的ip地址以及端口号保持一致
    ip_port = ("10.36.131.32",6666)
    clientSocket.connect(ip_port)
    
    #3.发送数据
    #sendall(string) ,字节类型的字符串【编码的过程】
    clientSocket.sendall(bytes("hello你好啊",encoding="utf-8"))
    
    #4.关闭客户端
    clientSocket.close()
    
    2.2客户端和服务端的数据交互

    代码演示:

    server:

    import  socket
    
    server = socket.socket()
    
    server.bind(("10.36.131.32",6666))
    
    server.listen(5)
    
    conn,address = server.accept()
    
    print("连接成功")
    
    while True:
        clientData = conn.recv(1024)
        result = clientData.decode("utf-8")
        print("客户端对服务端说:",result)
    
        if result == "bye" or result == "再见":
            break
    
        sendData = input("请输入要给回复客户端的数据:")
        conn.send(sendData.encode("utf-8"))
    
    server.close()
    

    client:

    import  socket
    
    client = socket.socket()
    
    client.connect(("10.36.131.32",6666))
    
    while True:
        sendData = input("请输入要发送给服务端的数据:")
        client.send(sendData.encode("utf-8"))
    
        serverData = client.recv(1024)
        result = serverData.decode("utf-8")
        print("服务端回复:",result)
    
        if result == "bye":
            break
    
    client.close()
    

    3.UDP编程

    User Datagram Protocol,用户数据包协议

    特点:

    ​ a.不安全的

    ​ b.无连接

    ​ c.效率高,速度快

    ​ d.对数据的大小是有限制的,每个被传输的数据包的大小不超过64k

    四、发邮件和发短信【扩展】

    1.发短信

    互亿无线

    #发送短信
    #APIID:C11345804
    #APIKEY:735d183ae02189f678c26800ac19b03a
    

    代码演示:

    # 接口类型:互亿无线触发短信接口,支持发送验证码短信、订单通知短信等。
    # 账户注册:请通过该地址开通账户http://sms.ihuyi.com/register.html
    # 注意事项:
    # (1)调试期间,请使用用系统默认的短信内容:您的验证码是:【变量】。请不要把验证码泄露给其他人。;
    # (2)请使用APIID(查看APIID请登录用户中心->验证码短信->产品总览->APIID)及 APIkey来调用接口;
    # (3)该代码仅供接入互亿无线短信接口参考使用,客户可根据实际需要自行编写;
    
    # !/usr/local/bin/python
    # -*- coding:utf-8 -*-
    import http.client
    import urllib
    
    host = "106.ihuyi.com"
    sms_send_uri = "/webservice/sms.php?method=Submit"
    
    # 用户名是登录用户中心->验证码短信->产品总览->APIID
    account = "C11345804"
    # 密码 查看密码请登录用户中心->验证码短信->产品总览->APIKEY
    password = "735d183ae02189f678c26800ac19b03a"
    
    def send_sms(text, mobile):
        params = urllib.parse.urlencode(
            {'account': account, 'password': password, 'content': text, 'mobile': mobile, 'format': 'json'})
        headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
        conn = http.client.HTTPConnection(host, port=80, timeout=30)
        conn.request("POST", sms_send_uri, params, headers)
        response = conn.getresponse()
        response_str = response.read()
        conn.close()
        return response_str
    
    
    if __name__ == '__main__':
        #需要接受短信的目标手机号
        mobile = "18566666666"
        text = "您的验证码是:121254。请不要把验证码泄露给其他人。"
    
        print(send_sms(text, mobile))
    

    2.发邮件

    代码演示:

    import smtplib
    from email.mime.text import MIMEText
    
    
    # 邮箱
    # 邮件
    
    # smtp服务器:smtp.163.com
    # 端口:25
    # 邮箱账号(发送者):niejeff@163.com
    # 授权码:123456abcde
    # 接收者:niejeff@163.com
    
    fromEmail = "niejeff@163.com"
    authCode = "123456abcde"
    
    smtpServer = "smtp.163.com"
    port = 25
    
    toEmail = '904552498@qq.com'  # "niejeff@163.com"
    
    # 创建邮箱对象
    smtp = smtplib.SMTP(smtpServer, port)
    smtp.login(fromEmail, authCode)
    
    # 创建邮件
    msg = MIMEText("今晚来我家吃鸡")
    msg['Subject'] = "吃鸡"
    msg['From'] = fromEmail
    msg['To'] = toEmail
    
    # 发送
    smtp.sendmail(fromEmail, toEmail, msg.as_string())
    
    # 关闭
    smtp.close()
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:Python基础-day17

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