zoukankan      html  css  js  c++  java
  • 编写基于tcp协议的套接字程序

    一:网络知识复习

    1.cs架构和bs架构:

     1.1什么cs架构和bs架构是?

      CS即Client/Server(客户机/服务器)结构,C/S结构在技术上很成熟,它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。但是该结构的程序是针对性开发,变更不够灵活,维护和管理的难度较大。通常只局限于小型局域网,不利于扩展。并且,由于该结构的每台客户机都需要安装相应的客户端程序,分布功能弱且兼容性差,不能实现快速部署安装和配置,因此缺少通用性,具有较大的局限性。要求具有一定专业水准的技术人员去完成。

      BS即Browser/Server(浏览器/服务器)结构,就是只安装维护一个服务器(Server),而客户端采用浏览器(Browse)运行软件。B/S结构应用程序相对于传统的C/S结构应用程序是一个非常大的进步。 B/S结构的主要特点是分布性强、维护方便、开发简单且共享性强、总体拥有成本低。但数据安全性问题、对服务器要求过高、数据传输速度慢、软件的个性化特点明显降低,这些缺点是有目共睹的,难以实现传统模式下的特殊功能要求。例如通过浏览器进行大量的数据输入或进行报表的应答、专用性打印输出都比较困难和不便。此外,实现复杂的应用构造有较大的困难。

    1.2他们的比较

    2.公网和私网:

    公网、私网是两种Internet的接入方式。

    公网接入方式:上网的计算机得到的IP地址是Internet上的非保留地址,公网的计算机和Internet上的其他计算机可随意互相访问。
    内网:也就是常说的局域网。是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。

    3.arp协议

      地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等

    arp协议可以解析成它对应的那个mac地址

    arp协议计算 ip和子网是否在局域网,在的话ip要mac地址  目标主机mac  目标主机ip

    arp协议计算 ip不在一个子网,网关mac(数据往外发),目标主机mac

     往外发送时候,原ip向网关发送,网关向原ip要mac,后再向外部发送

    4.本地回环地址:

    127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在Windows操作系统中也有相似的定义,所以通常在安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。

    https://www.cnblogs.com/linhaifeng/p/8566036.html      子网划分

    5.字符串前面+b是专程bash类型等同于(‘hello’.emcod('utf-8)

    二:编写基于tcp协议的套接字程序

    socket是对应用层以下的层进行封装

    1.套接字工作流程

    2.tcp如何使用

    服务端:


    import
    socket import subprocess #1买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #流式协议 #phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR) #2绑定银行卡 phone.bind(('127.0.0.1',8082)) #元组内放自己的ip地址 #再次启动服务端,告诉端口已经占用,解决办法有:1.换个端口,8080换掉同时客户端也需要换掉 2.在绑定之前加上下面内容:phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR) # 防止位置在 #2绑定银行卡 上面 #3开机 phone.listen(5) #半连接池,5以内接受访问请求。 5是访问数量,也就是说除了正在访问的这个,最多再有5个 #4建立链接的请求 while True: #需要一个循环不停地与客户端交互 connect,client_addr=phone.accept() print(client_addr) #5 收/发消息 while True: try: #避免客户端突然中断,不会造成服务端崩溃,针对Windows date=connect.recv(1024) #最大的接受字节数 if len(date)==0: #针对linux系统的 break cmd=date.decode('utf-8') obj=subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) res1=obj.stdout.read() res2=obj.stderr.read() connect.send(res1+res2) #print(date.decode('utf-8')) #connect.send(date.upper()) except Exception: break #6挂电话 connect.close() #7关机 phone.close()
    客户端
    
    
    import socket
    #1买手机
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #流式协议
    
    #2打电话
    phone.connect(('127.0.0.1',8082))
    
    #3发/收数据
    while True:
        msg=input('<<<<').strip()
        if len(msg)==0:                      #避免客户端输入是空的时候出现异常,下面的无法操作
            continue
        phone.send(msg.encode('utf-8'))
        date=phone.recv(1024)
        print(date.decode('utf-8'))
    
    #4关闭
    phone.close()

     ('127.0.0.1', 53338)      分别为客户端ip和接口

  • 相关阅读:
    【小5聊】腾讯位置服务之小程序简单使用以及显示附近WC步行路线
    前端面试——JS进阶
    【小5聊】腾讯位置服务之小程序简单使用以及显示附近WC步行路线
    Node学习(三)
    HTML5 知识点总结(六)
    uniapp集成unipush监听推送,处理兼容ios在线无法收到推送通知问题以及安卓推送处理
    记一些CSS属性总结(二)
    Python getattr() 函数
    python中的__init__和__new__的区别
    干货报告:八大科技领域,280 页,InfoQ《2020 中国技术发展白皮书》开放下载...
  • 原文地址:https://www.cnblogs.com/dayday-up-a/p/14281975.html
Copyright © 2011-2022 走看看