zoukankan      html  css  js  c++  java
  • 网络编程, socket用法

    1、架构

    C/S架构(鼻祖)
    c:client 客户端
    s:server 服务器

    B/S架构(隶属于C/S架构)
    b:browser 浏览器
    s: server 服务器

    B/S架构的优点:统一了应用的入口(是一个趋势)

    =====================网络编程基础====================

    2、同一台电脑上两个py文件通信:文件
    网卡:网卡生产厂商生产的,不是电脑厂商生产的
    网卡上有一个mac地址,又叫做物理地址,全世界唯一
    查看mac地址命令:ipconfig -all


    3、两台电脑如何通信:一根网线


    4、几十台电脑如何通信:局域网
    交换机通信:
    广播:吼一嗓子
    单播:方向固定的向某一个主机发送
    组播:朝某一部分或某一组主机发送

    ip地址:是一个四位点分十进制的一串数字
    子网掩码:是计算机根据你的ip地址生产的一个东西
    网段:ip地址 &(与) 子网掩码

    ip :192.168.12.84

    11000000.10101000.00001100.01010100
    11111111.11111111.11111111.00000000
    -----------------------------------
    11000000.10101000.00001100.00000000
    192.168.12.0


    子网:255.255.255.0


    5、更多电脑之间的通信:
    广域网 交换机+路由器+代理ip

    6、库 == 模块 :别人已经写好的代码,我可以直接拿来调用

    tcp和udp协议都是基于socket模块
    tcp:安全可靠,面向连接,字节流服务--代表没有边界
    udp:不安全不可靠,不面向连接,但是效率高


    7、端口号:
    ip + prot 唯一确定一台主机上的某一个程序
    允许开发人员使用的端口号范围从8000开始 8000-10000

    8、tcp协议的三次握手过程:
    客户端先发:我想请求连接
    服务器发: 同意,我也想连接你
    客户端发: 同意连接

    9、tcp协议的四次挥手过程:
    客户端:我想断开连接
    服务器:行
    服务器:我也想和你断开连接
    客户端:行

    面试题:

    1、你知道哪些研发相关的架构?

        c/s  b/s(统一了应用的接口)

    2、arp协议做了什么事情?

      通过ip地址找到对应的mac地址

    3、交换机的通讯方式?

      广播,单播,组播

    4、你认为tcp和udp的区别?

      tcp:安全,面向连接

      udp:快

    5、请描述出osi五层模型?

      应用层(py文件)----传输层(tcp,udp协议)----网络层(ip协议)----数据链路层(网卡,arp协议)----物理层(网线,集线器,电信号)

    6、网段ip怎么确定?

      ip地址 按位与 子网掩码

    7、请描述B/S架构的优势

       b/s(统一了应用的接口)

    ====================socket====================

    tcp协议,不允许在同一时间点同时和多个客户端连接通信   

    s:server 服务器

    import socket
    sk = socket.socket()                 #创建
    sk.bind(("127.0.0.1",8090))      #绑定
    sk.listen(5)               #监听
    
    while True:
        fd,addr = sk.accept()      # fd 收到的信息  addr 客户端的地址
        while 1:
            msg_s = input(">>>")
            fd.send(msg_s.encode("utf-8"))    # 发送
            if msg_s == "q":
                break
    
            msg_r = fd.recv(1024).decode('utf-8')  #接收
            if msg_r == "q":
                break
            print(msg_r)
        fd.close()
    
    sk.close()

    c:client 客户端

    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',8090))    #连接
    
    while True:
        msg_r = sk.recv(1024).decode('utf-8')    #接收
        if msg_r == "q":
            break
        print(msg_r)
    
        msg_s = input(">>>")
        sk.send(msg_s.encode('utf-8'))    #发送
        if msg_s == "q":
            break
    
    
    sk.close()

     

    udp协议,允许在同一个时间点同时和多个客户端连接通信

    s:server 服务器

    import socket
    import random
    
    ls = ["33[1;"+str(i)+"m" for i in range(30,38)] #生成颜色
    print(socket.gethostbyname(socket.gethostname())) #查看本机的ip地址
    sk
    = socket.socket(type=socket.SOCK_DGRAM) # SOCK_DGRAM == udp协议 sk.bind(('192.168.12.130',8080)) # 本机的ip地址 while True:
    msg_s,addr
    = sk.recvfrom(1024)      # msg_s 接收信息 msg_s = msg_s.decode('utf-8') a = random.choices(ls)
    print("%s %s 33[0m" % (a[0],msg_s))   a = input(">>>").encode('utf-8')      sk.sendto(a,addr)              #回复信息

    c:client 客户端

    import socket
    name = input('<<<<')
    sk = socket.socket(type=socket.SOCK_DGRAM)
    
    while 1:
        tall = input('<<')
        tall = name+':'+tall
        if tall == 'q':
            break
        sk.sendto(tall.encode('utf-8'),('192.168.12.130',8080))
    
        conn, addr = sk.recvfrom(1024)
        msg_r = conn.decode('utf-8')
        print(f'33[0;32;40m{name} : 33[1;32;44m{msg_r}33[0m')
    
    
    sk.close()

    ================用udp协议获取时间=============

    s:server 服务器  

    import socket
    import time
    sk
    = socket.socket(type=socket.SOCK_DGRAM) sk.bind(("127.0.0.1",8080)) while True: tm,addr = sk.recvfrom(1024) #接收 tm_f = time.strftime(tm.decode('utf-8')) #时间转换 sk.sendto(tm_f.encode('utf-8'),addr)  #发送 sk.close()

    c:client 客户端

    import socket
    import time
    
    sk = socket.socket(type=socket.SOCK_DGRAM)
    
    tm = input("请输入时间格式:")
    while True:
    
        sk.sendto(tm.encode("utf-8"),("127.0.0.1",8080))    #发送
        tma,addr = sk.recvfrom(1024)    #接收
        print(tma.decode("utf-8"))  
        time.sleep(3)
    
    
    sk.close()
    
    # %Y-%m-%d %H:%M:%S  时间格式 
  • 相关阅读:
    WPF 使用 Direct2D1 画图 绘制基本图形
    WPF 使用 Direct2D1 画图 绘制基本图形
    dot net core 使用 IPC 进程通信
    dot net core 使用 IPC 进程通信
    win2d 图片水印
    win2d 图片水印
    Java实现 LeetCode 240 搜索二维矩阵 II(二)
    PHP closedir() 函数
    PHP chroot() 函数
    PHP chdir() 函数
  • 原文地址:https://www.cnblogs.com/luchenhui/p/9141959.html
Copyright © 2011-2022 走看看