• 网络编程


    一,,结构介绍

    1  c/s架构

    c/s就是Client和Server的缩写,中文就是,客户端与服务端架构,这种架构也是从用户层面

    来划分的

    这里的客户端一般泛指客户端应用程序exe先安装才能应用

    2   b/s架构

    B/s就是Browser(浏览器),其实你也可以将其理解为是Client的一种,只是这个客户端不需要安装

    程序,而是通过HTTP请求来实现的

    二,网络基础

    在网络上一个程序要如何才能找到另一个程序,

    通过ip地址就可以实现

    ip:ip地址就是指互联网协议地址它为互联网上的每一个网络和每一台主机分配一个逻辑地址,

    以此来区分和物理地址的差异

    IP地址是一个32位的二进制,通常被分割为4个“8”位的二进制

    端口:英文:port可以理解为是设备与外界通讯交流的出口

    在同一个时间内只有一个程序占用一个端口

    端口的范围0--65535

    一般都用8000之后的端口,

    IP地址精确到一台电脑,二端口精确到具体的程序

    TCP协议:面向连接的协议,可靠地,传输效率低,全双工通信,面向字节流,

    UDP协议:不可靠,无连接的服务,传输效率低的,(发送前时延小),面向报文,尽最大努力服务

    无拥塞控制

    arp协议:通过ip找mac地址

    mac:MAC地址是厂家指定的,全球唯一,不会重复

    三   套接字(socket)

    套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。 因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的

    1,,基于文件类型的套接字家族

    AF_UNIX

    unix一切皆文件,

    2,,基于网络类型的套接字家族

    AF_INET

    osi七层模型

    应用层,表示层,对话层,传输层,网络层,数据链路层,物理层

    但是一般我们都关注于五层

            存储:

    应用层,          程序

    传输层,  tcp、udp

    网络层,    ip

    数据链路层,  mac   arp

    物理层    二进制,网线网卡

    四,,socket初级使用

    基于tcp协议的socket

    tcp是基于链接的,所以必须先启动服务端,然后再启动客户端去链接服务端

    server

    import socket
    sk=socket.socket()
    sk.bind(('127.0.0.1',8080))
    sk.listen()
    coon,cli=sk.accept()
    ret=coon.recv(1024)
    print(ret)
    coon.send(b'ni')
    coon.close()
    sk.close()

    client

    import socket
    sk=socket.socket()
    sk.connect(('127.0.0.1',8080))
    sk.send(b'hello')
    ret=sk.recv(1024)
    print(ret)
    sk.close()

     这种问题的解决方案:

    import socket
    sk=socket.socket()
    
    sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 
    
    #端口的重复使用
    
    sk.bind(('127.0.0.1',8080))
    sk.listen()
    coon,cli=sk.accept()
    ret=coon.recv(1024)
    print(ret)
    coon.send(b'ni')
    coon.close()
    sk.close()

     基于tcp的聊天程序

    server

    import socket
    sk=socket.socket()
    sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    sk.bind(('127.0.0.1',8080))
    sk.listen()
    coon,cli=sk.accept()
    while 1:
        ret=coon.recv(1024).decode('utf-8')
        print(ret)
        if ret=='bye':
            break
        info=input('>>>')
        coon.send(bytes(info,encoding='utf-8'))
    coon.close()
    sk.close()

    client

    import socket
    sk=socket.socket()
    sk.connect(('127.0.0.1',8080))
    while 1:
        info=input('>>>')
        sk.send(bytes(info,encoding='utf-8'))
    
        ret=sk.recv(1024).decode('utf-8')
        print(ret)
        if ret=='bye':
            break
    sk.close()

     上面说的都是基于tcp协议的,下面看看基于udp协议的

    import socket,time
    sk=socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1',8090))
    msg,addr=sk.recvfrom(1024)
    msg=msg.decode('utf-8')
    sk.sendto(bytes(time.strftime(msg,time.localtime()),encoding='utf-8'),addr)
    sk.close()
    import socket,time
    sk=socket.socket(type=socket.SOCK_DGRAM)
    dd=('127.0.0.1',8090)
    sk.sendto(bytes('%Y-%m-%d',encoding='utf-8'),dd)
    msg,addr=sk.recvfrom(1024)
    print(msg.decode('utf-8'))
    sk.close()
    C:UsershcAppDataLocalProgramsPythonPython36python3.exe C:/s9/day30/client.py
    2018-01-26
    
    Process finished with exit code 0
  • 相关阅读:
    跨域
    reactV16理解
    css动画总结
    h5与app交互
    跨域
    ant-design如果按需加载组件
    移动端300ms延迟原理,穿透、遮罩层滑动导致下面滑动总结
    监听数组的变化
    使用VS Code调试Node.js
    React-typescript-antd 常见问题
  • 原文地址:https://www.cnblogs.com/xuguangzong/p/8350888.html
Copyright © 2020-2023  润新知