zoukankan      html  css  js  c++  java
  • Python之旅.第八章.网络编程

    一、网络编程

    1C/SB/S架构

       client<------>server

       browser<------>server

       学习socket编程就是要编写一个客户端软件和服务端软件,然后实现服务端与客户端基于网络通信。

     

    2、什么是网络?

        1、物理连接介质

        2、互联网协议

           互联网协议就是一堆标准

           比喻:互联网协议就是计算机界的英语

     

    3osi五层协议(有四层,有七层,主要用五层) 

    应用层:例如HTTPmailftp,程序员定义的

    传输层:TCP/ UDP,基于端口工作,通过端口找到是电脑中的哪个应用程序

    网络层:IP协议,通过IP地址找到所在局域网

    数据链路层:Ethernet以太网协议在局域网内通过mac地址查找电脑,规定分组标准

    物理层:发送电信号 01010101

     

    二、基于tcp协议的套接字通信

    服务端:

    import socket

     

    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话

    phone.bind(('127.0.0.1',8081)) #插手机卡,补充:0-65535 0-1024给系统用的

    phone.listen(5) # 开机

     

    print('start...')

    conn,client_addr=phone.accept() # 等电话连接

    print('连接来了:',conn,client_addr)

     

    # 收发消息

    msg=conn.recv(1024) #收消息,1024是一个最大的限制

    print('客户端的消息: ',msg.decode('utf-8'))

    conn.send(msg+'SB'.encode('utf-8'))

     

    # 挂电话

    conn.close()

    # 关机

    phone.close()

     

    客户端:

    import socket

     

    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话

    phone.connect(('127.0.0.1', 8081)) # 拨电话,地址为服务端的ip和端口

     

    phone.send('你好'.encode('utf-8')) # 发消息b'hello'

    data = phone.recv(1024) #收消息

     

    print(data.decode('utf-8'))

     

    phone.close()

     

    三、加上通信循环与连接循环

    服务端:

    import socket

     

    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    phone.bind(('127.0.0.1',8081))

    phone.listen(5)

     

    print('start...')

    while True: # 连接循环

        conn,client_addr=phone.accept()

        print('客户端 ',client_addr)

     

        while True: # 通信循环

            try:

                msg=conn.recv(1024)

                print('客户端的消息: ',msg)

                conn.send(msg+b'SB')

            except ConnectionResetError:

                break

        conn.close()

    phone.close()

     

    客户端:

    import socket

     

    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话

    phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口

     

    while True:

        msg=input('>>>: ').strip()

        phone.send(msg.encode('utf-8')) # 发消息b'hello'

        data=phone.recv(1024) #收消息

     

        print(data.decode('utf-8'))

     

    phone.close()

     

    四、其他

    1 互联网协议,可看作是一个安装在计算机上的包

    2 交换机:有mac地址学习功能

    3 ARP(地址解析协议),可将IP地址转成mac地址,mac地址转成IP地址

    4 IP+端口可锁定一架计算机上的某个应用程序

    5 IP 和子网掩码-》局域网地址(子网地址)

    6  TCD又称好人协议,可靠协议,需要三次握手建立链接

    7 标志位:sgn=1请求信息,ack=1 确认信息,seq=’ ’序列号,ack=1+x(序列号)

    8 在创建链接时如果并发少,基本看不多SYN—REVD。但如若受到洪水攻击(高并发)系统会出现SYN—REVD状态

    9 TCD需要四次挥手以断链接。谁先发完信息,谁先发出断链接请求。通常是SERVER端先发出,但不一定。

    10fin=1 断链接请求,ack=1 确认信息

    11Fin_WAIT_1 为主动断链接的一方

    12、在断链接时如果并发少,基本看不多TIME—WAIT。但如若高并发,系统会出现TIME—WAIT状态,需要监查内存

    13TCP,需要建链接,又称可靠传输,相对安全但效率低,一般用于转账

    14UDP,不需要建链接,又称不可靠传输,效率高,但安全性较低,一般用于聊天(QQ)和查询

    15、套接字有被称作IP和端口

    16AF_INET AFaddress family 套接字类型,INET:基于网络)

    17TCP 被称为流式协议,SOCK_STREAM

    18UDP 被称为数据报协议,SOCK_DGRAM

    19127.0.0.1 指本机,主要用于调试

    20、端口0-655350-1024被系统使用,其他号码可选用

    21phone.listen(5): 5指的是同时最多可以用多少个请求,而不是连接数

    22conn.recv(1024)1024为最大限制的字节数

    23conn为套接字对象,为三次握手的产物,可收可发

    24conn.close():回收系统资源

     

  • 相关阅读:
    userdir 希望用户能够以http://X.X.X.X/~username 方式来访问自己的网页
    var_export() 函数的使用
    mb_detect_encoding — 检测字符的编码
    详解PHP fsockopen的使用方法
    jQuery 返回顶部
    Mysql函数
    sql where 1=1和 0=1 的作用
    Numpy基础学习(三)
    Numpy 中的矩阵
    Numpy数组的全通用函数
  • 原文地址:https://www.cnblogs.com/yangli0504/p/8877132.html
Copyright © 2011-2022 走看看