常見通信協議


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM