常见通信协议

博客地址: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 

原文地址:https://www.cnblogs.com/Struts-pring/p/11981921.html