濮阳杆衣贸易有限公司

主頁 > 知識庫 > python實(shí)現(xiàn)socket簡單通信的示例代碼

python實(shí)現(xiàn)socket簡單通信的示例代碼

熱門標(biāo)簽:電話外呼系統(tǒng)招商代理 佛山通用400電話申請 電話機(jī)器人貸款詐騙 廣東旅游地圖標(biāo)注 蘇州人工外呼系統(tǒng)軟件 淮安呼叫中心外呼系統(tǒng)如何 京華圖書館地圖標(biāo)注 看懂地圖標(biāo)注方法 打印谷歌地圖標(biāo)注

首先先來簡單介紹下socket:

(具體更詳細(xì)介紹的可以在網(wǎng)上找找,都講得非常詳細(xì)),這里主要是我自己的一些理解。

socket是在應(yīng)用層與傳輸層之間的一個(gè)抽象層,它的本質(zhì)是編程接口,通過socket,才能實(shí)現(xiàn)TCP/IP協(xié)議。
它就是一個(gè)底層套件,用來處理最底層消息的接受和發(fā)送。
socket翻譯為套接字,可以把TCP/IP復(fù)雜的操作抽象為簡單的幾個(gè)接口來供應(yīng)用層調(diào)用來實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中的通信。socket起源于Unix,而Unix的基本要素之一就是“一切都為文件”,即可以通過打開——讀寫——關(guān)閉的模式來操作,通過這一點(diǎn)我們就可以來實(shí)現(xiàn)socket的簡單編寫

這里再貼上關(guān)于socket工作原理的具體圖像:


大家若有看不懂的,也先別著急,看完下面的再來結(jié)合這張圖理解會有更深的理解

其實(shí)在本機(jī)上,我們可以通過PID來標(biāo)識唯一一個(gè)進(jìn)程,但如果網(wǎng)絡(luò)中的兩個(gè)進(jìn)程要進(jìn)行通訊的話,PID的沖突就很大了,這個(gè)時(shí)候IP協(xié)議的ip地址就可以來標(biāo)識主機(jī),而TCP的協(xié)議與端口號可以標(biāo)識主機(jī)的一個(gè)進(jìn)程,所以就可以通過ip地址+協(xié)議+端口號來標(biāo)識網(wǎng)絡(luò)中的某個(gè)進(jìn)程

大概了解的差不多了,我就來說說python里的socket庫
先簡單介紹一些socket庫里的參數(shù):
首先是地址蔟:

socket.AF_INET 表示的是IPv4(這也是socket里默認(rèn)的)
socket.AF_INET6 表示的是IPv6
socket.AF_UNIX 這個(gè)主要用于單一的UNIX進(jìn)程間的通信

然后是TYpe:

socket.SOCK_STREAM //流式socketTCP協(xié)議(默認(rèn)的),用來保證數(shù)據(jù)順序以及可靠性
socket.SOCK_DGRAM //這是報(bào)式socket UDP協(xié)議,保證數(shù)據(jù)接受的順序,不可靠的連接
socket.SOCK_RAW //這是原始套接字,允許對底層協(xié)議(TCP/IP)直接訪問

這里的流式與數(shù)據(jù)報(bào)式其實(shí)就是面向的區(qū)別:
流式是面向連接的TCP服務(wù)應(yīng)用,而數(shù)據(jù)報(bào)式就是非面向連接的UDP服務(wù)應(yīng)用,也就是無連接的socket

接著是一些方法的使用:

1:sk=socket.socket() :括號里面包含兩個(gè)參數(shù),一個(gè)參數(shù)默認(rèn)是ip地址蔟的socket.AF_INET,也就是IPv4;還有一個(gè)默認(rèn)是傳輸TCP協(xié)議,也就是socket.SOCK_STREAM
2:sk.bind(()) :最里面的括號里包含兩個(gè)參數(shù),分別是客戶端的ip地址與端口號
3:sk.listen(n): 里面的n表示阻塞連接n個(gè)進(jìn)程,也就是最大等待數(shù)為n個(gè),當(dāng)連接上某個(gè)進(jìn)程后,其他的都不會連接上,會處于等待狀態(tài),只有當(dāng)斷開與這個(gè)進(jìn)程的連接,其他的進(jìn)程才會依次連上
4a,b=sk.accept():返回的是一個(gè)元組,元組的第一個(gè)參數(shù)是連接的信息,第二個(gè)參數(shù)是客戶端的ip地址與端口號
5a.recv(1024): recv()表示接受信息,里面的1024表示最多接受的字節(jié)數(shù),如果有多余的字符就下次再進(jìn)行傳輸

大致的參數(shù)講解完了,現(xiàn)在來開始服務(wù)端的腳本編寫:

# -*-coding: utf-8 -*-
#引入socket庫
import socket
#這是進(jìn)行定義一個(gè)ip協(xié)議版本AF_INET(IPv4),定義一個(gè)傳輸TCP協(xié)議,SOCK_STREAM
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#定義ip地址與端口號,ip地址就是服務(wù)端的ip地址,端口隨便定義,但要與客戶端腳本一致
ip_port=('127.0.0.1',8000)
#綁定一個(gè)端口
sk.bind(ip_port)
#監(jiān)聽一個(gè)端口,這里的數(shù)字3是一個(gè)常量,表示阻塞3個(gè)連接,也就是最大等待數(shù)為3
sk.listen(3)
#接受客戶端的數(shù)據(jù),并返回兩個(gè)參數(shù),a為連接信息,b為客戶端的ip地址與端口號
a,b=sk.accept()
print(a)
while True:
    data=a.recv(1024)#客戶端發(fā)送的數(shù)據(jù)存儲在recv里,1024指最大接受數(shù)據(jù)的量
    print(data.decode('utf-8'))
    message=input("you can say:")
    a.send(message.encode('utf-8'))
    if message==('bye'):
        break

接著來編寫客戶端的腳本:

# -*- coding:utf-8 -*-
#導(dǎo)入socket庫
import socket
#定義一個(gè)ip協(xié)議版本AF_INET,為IPv4;同時(shí)也定義一個(gè)傳輸協(xié)議(TCP)SOCK_STREAM
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#定義IP地址與端口號
ip_port=('127.0.0.1',8000)
#進(jìn)行連接服務(wù)器
client.connect(ip_port)
while True:
    message=input('You can say:')
    client.send(message.encode('utf-8'))#將發(fā)送的數(shù)據(jù)進(jìn)行編碼
    a=client.recv(1024)#接受服務(wù)端的信息,最大數(shù)據(jù)為1k
    print(a.decode('utf-8'))
    if a.decode('utf-8')=='bye':
        break

這是運(yùn)行的結(jié)果


左邊窗口是服務(wù)端代碼,右邊窗口是客戶端代碼,當(dāng)在服務(wù)端輸入bye過后,整個(gè)對話將關(guān)閉

以上就是socket的簡單通訊了

最后再講講UDP的專用代碼(UDP與TCP的代碼大致相同

sendto():這個(gè)函數(shù)用于在使用UDP時(shí) 發(fā)送數(shù)據(jù)
recvform():UDP專用,用于接受數(shù)據(jù),返回?cái)?shù)據(jù)遠(yuǎn)端的IP地址和端口
closc():關(guān)閉socket

大家若有興趣可以自己去試試UDP的腳本實(shí)現(xiàn),這里就不做具體示范啦

到此這篇關(guān)于python實(shí)現(xiàn)socket簡單通信的示例代碼的文章就介紹到這了,更多相關(guān)python socket通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python socket 套接字實(shí)現(xiàn)通信詳解
  • python粘包問題及socket套接字編程詳解
  • 詳解python3中socket套接字的編碼問題解決
  • python socket網(wǎng)絡(luò)編程步驟詳解(socket套接字使用)
  • Python基礎(chǔ)之Socket通信原理
  • python和websocket構(gòu)建實(shí)時(shí)日志跟蹤器的步驟
  • 用Python進(jìn)行websocket接口測試
  • python基礎(chǔ)之Socket套接字詳解

標(biāo)簽:衡水 湖州 駐馬店 中山 江蘇 呼和浩特 畢節(jié) 股票

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python實(shí)現(xiàn)socket簡單通信的示例代碼》,本文關(guān)鍵詞  python,實(shí)現(xiàn),socket,簡單,通信,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python實(shí)現(xiàn)socket簡單通信的示例代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于python實(shí)現(xiàn)socket簡單通信的示例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    凌海市| 海兴县| 韶山市| 吴堡县| 河北省| 临洮县| 周口市| 靖远县| 石景山区| 桐乡市| 永登县| 安远县| 汉中市| 法库县| 桂林市| 浑源县| 涡阳县| 台湾省| 周口市| 嘉峪关市| 平定县| 光泽县| 聂拉木县| 精河县| 罗城| 普格县| 丽江市| 贵港市| 揭西县| 普安县| 武陟县| 望奎县| 太仆寺旗| 汉沽区| 吉安县| 石泉县| 胶州市| 久治县| 准格尔旗| 莱芜市| 桓台县|