最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年04月13日 09:02:28   作者:o3Ev  
這篇文章主要介紹了python實現(xiàn)socket簡單通信的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

首先先來簡單介紹下socket:

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

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

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

在這里插入圖片描述

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

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

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

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

然后是TYpe:

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

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

接著是一些方法的使用:

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

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

# -*-coding: utf-8 -*-
#引入socket庫
import socket
#這是進行定義一個ip協(xié)議版本AF_INET(IPv4),定義一個傳輸TCP協(xié)議,SOCK_STREAM
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#定義ip地址與端口號,ip地址就是服務端的ip地址,端口隨便定義,但要與客戶端腳本一致
ip_port=('127.0.0.1',8000)
#綁定一個端口
sk.bind(ip_port)
#監(jiān)聽一個端口,這里的數(shù)字3是一個常量,表示阻塞3個連接,也就是最大等待數(shù)為3
sk.listen(3)
#接受客戶端的數(shù)據(jù),并返回兩個參數(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 -*-
#導入socket庫
import socket
#定義一個ip協(xié)議版本AF_INET,為IPv4;同時也定義一個傳輸協(xié)議(TCP)SOCK_STREAM
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#定義IP地址與端口號
ip_port=('127.0.0.1',8000)
#進行連接服務器
client.connect(ip_port)
while True:
    message=input('You can say:')
    client.send(message.encode('utf-8'))#將發(fā)送的數(shù)據(jù)進行編碼
    a=client.recv(1024)#接受服務端的信息,最大數(shù)據(jù)為1k
    print(a.decode('utf-8'))
    if a.decode('utf-8')=='bye':
        break

這是運行的結(jié)果

在這里插入圖片描述

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

以上就是socket的簡單通訊了

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

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

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

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

相關(guān)文章

  • python統(tǒng)計文章中單詞出現(xiàn)次數(shù)實例

    python統(tǒng)計文章中單詞出現(xiàn)次數(shù)實例

    在本篇文章里小編給大家整理的是關(guān)于python統(tǒng)計文章中單詞出現(xiàn)次數(shù)實例,需要的朋友們參考學習下。
    2020-02-02
  • pandas進行時間數(shù)據(jù)的轉(zhuǎn)換和計算時間差并提取年月日

    pandas進行時間數(shù)據(jù)的轉(zhuǎn)換和計算時間差并提取年月日

    這篇文章主要介紹了pandas進行時間數(shù)據(jù)的轉(zhuǎn)換和計算時間差并提取年月日,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • python人工智能tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡CNN

    python人工智能tensorflow構(gòu)建卷積神經(jīng)網(wǎng)絡CNN

    學習神經(jīng)網(wǎng)絡已經(jīng)有一段時間,從普通的BP神經(jīng)網(wǎng)絡到LSTM長短期記憶網(wǎng)絡都有一定的了解,但是從未系統(tǒng)的把整個神經(jīng)網(wǎng)絡的結(jié)構(gòu)記錄下來,我相信這些小記錄可以幫助我更加深刻的理解神經(jīng)網(wǎng)絡
    2022-05-05
  • Python 2與Python 3版本和編碼的對比

    Python 2與Python 3版本和編碼的對比

    這篇文章主要介紹了Python 2與Python 3版本和編碼的對比,文中介紹的很詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • python 判斷矩陣中每行非零個數(shù)的方法

    python 判斷矩陣中每行非零個數(shù)的方法

    今天小編就為大家分享一篇python 判斷矩陣中每行非零個數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python開發(fā)前景如何

    python開發(fā)前景如何

    在本篇文章中小編給大家整理了關(guān)于python開發(fā)前景的知識點及相關(guān)內(nèi)容,有興趣的朋友們可以跟著學習參考下。
    2020-06-06
  • Python 40行代碼實現(xiàn)人臉識別功能

    Python 40行代碼實現(xiàn)人臉識別功能

    很多人都認為人臉識別是一項非常難以實現(xiàn)的工作,看到名字就害怕,然后心懷忐忑到網(wǎng)上一搜,看到網(wǎng)上N頁的教程立馬就放棄了。其實如果你不是非要深究其中的原理,只是要實現(xiàn)這一工作的話,人臉識別也沒那么難。今天我們就來看看如何在40行代碼以內(nèi)簡單地實現(xiàn)人臉識別。
    2017-04-04
  • Python map函數(shù)()用法

    Python map函數(shù)()用法

    map()函數(shù)是Python中的一個內(nèi)置函數(shù),它的功能是將指定的函數(shù),依次作用于可迭代對象的每個元素,并返回一個迭代器對象,這篇文章主要介紹了Python map函數(shù)()用法,需要的朋友可以參考下
    2023-07-07
  • python自動發(fā)郵件庫yagmail的示例代碼

    python自動發(fā)郵件庫yagmail的示例代碼

    本篇文章主要介紹了python自動發(fā)郵件庫yagmail的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 使用?OpenCV-Python?識別答題卡判卷功能

    使用?OpenCV-Python?識別答題卡判卷功能

    這篇文章主要介紹了使用?OpenCV-Python?識別答題卡判卷,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12

最新評論

成武县| 无锡市| 芦山县| 通城县| 蕲春县| 福鼎市| 西充县| 墨玉县| 清镇市| 当阳市| 金门县| 广水市| 游戏| 南投县| 洪泽县| 扶风县| 那曲县| 福鼎市| 札达县| 昭觉县| 时尚| 渝北区| 建始县| 商南县| 阿巴嘎旗| 北海市| 桑日县| 镇巴县| 平昌县| 安西县| 建瓯市| 泌阳县| 耒阳市| 青阳县| 龙口市| 南溪县| 德格县| 虎林市| 辽阳县| 南通市| 宣武区|