• 常见通信协议


    博客地址:https://blog.csdn.net/weixin_43796192/article/details/90111437

    常见通信协议

    应用层:

    HTTP(hypertext transfer protocol ):超文本传输协议
    FTP(File Transfer Protocol):文件传输协议
    SFTP(SSH File Transfer Protocol):安全文件传送协议
    DNS(domain name system):域名系统
    SMTP(simple mail transfer protocol): 简单邮件传输协议
    POP3(post office protocol-version3): 邮局协议3
    IMAP(internet mail access portocol): 因特网邮件访问协议
    SCP(Secure copy,based on SSH)SCP是智能网的核心部件,用来进行远程文件复制,且复制过程加密,数据传输使用SSH

    传输层(网络层):

    TCP(transmission control protocol):传输控制协议
    UDP(user Datagram Protocol):用户数据报协议

    网络层:

    IP(Internet Protocol):因特网协议
    ICMP(Internet Control Message Protocol,主要用于路由发送错误报告):控制报文协议

    链接层:

    MAC(media access control):媒体访问控制
    ARP(address resolution protocol):地址解析协议

    这次使用的是http协议来发送请求并传输图片得到回应,开始想的是用socket(套接字,编程接口)传输流实现图片的传输。
    以下是两者各自特点和区别:
    Socket:应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。Socket是对TCP/IP协议的封装,通过Socket,我们才能使用TCP/UDP协议。
    HTTP协议:是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
    1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
    2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
    区别:
    1)http是一种协议,socket是一种编程接口,主要包括TCP协议和UDP协议;
    2)http和TCP/UDP是两个不同层上的的协议。http是应用层的协议,TCP/UDP是传输层的协议,http是在TCP/UDP之上的协议,http协议使用了TCP/UDP,http更加高级一点但是没有很好的灵活性。

    由于项目需求,我选用了http协议来实现通信(通过python的pickle包(下面有一篇写的很详细的关于pickle包的博客,供大家查看)将图片转换为字节对象发给服务器端,服务器端解析即可),下面是客户端实现代码

    #!/usr/bin/python
    # -*-coding=utf-8 -*-

    import json
    import urllib
    import urllib2
    import requests
    import pickle


    def post(server_url, params):
    data = urllib.urlencode(params)
    request = urllib2.Request(server_url, data)
    return json.loads(urllib2.urlopen(request, timeout=10).read())


    def local_image(server_url, image_path):

    server_url="http://192.168.1.176:8080/Face/signIn" #服务器端提供的URL
    image_path="li.jpg"
    r_file = open(image_path, "rb")
    img = pickle.dumps(r_file.read()) #返回字节对象
    params = {"img": img}
    print post(server_url, params)

    if __name__ == "__main__":
    url = "http://192.168.20.129:8080/li.jpg?"
    # local image
    file_path = "li.jpg" #本地保存的图片路径
    local_image(url, file_path)

    经测试可以发送请求并得到应答。

    参考博客:
    https://blog.csdn.net/w369033345/article/details/72779553
    https://blog.csdn.net/ymaini/article/details/80645917
    https://blog.csdn.net/sinat_29552923/article/details/70833455 

  • 相关阅读:
    solidworks中的一些标注尺寸的技巧
    SolidWorks 2-8草图绘制的一般过程
    SolidWorks 2-7 草图的约束【课程来自虎课网】
    SolidWorks 2-5 草图的编辑
    HTML 文本格式化实例--实体
    今天长进之redis的学习
    初步了解Quartz
    职场风云3
    内网穿透
    职场风云2
  • 原文地址:https://www.cnblogs.com/Struts-pring/p/11981921.html
Copyright © 2020-2023  润新知