欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python socket網(wǎng)絡(luò)編程TCP/IP服務器與客戶端通信

 更新時間:2017年01月05日 10:37:44   投稿:lqh  
這篇文章主要介紹了Python socket網(wǎng)絡(luò)編程TCP/IP服務器與客戶端通信的相關(guān)資料,這里對Scoket 進行詳解并創(chuàng)建TCP服務器及TCP 客戶端實例代碼,需要的朋友可以參考下

Python socket網(wǎng)絡(luò)編程

初學 python,前段時間買了兩本書《python 編程從入門到實踐》《Python 核心編程第三版》,第一本書主要講的是一些基本語法和一些基本的使用方法,而第二本則深入很多,自己看來也是一知半解,剛好看到了這部分網(wǎng)絡(luò)編程,依然有好多不太理解的地方,不過想來通過自己不斷的摸索,不斷地搜尋資料學習,早晚應該會變得通透吧.......

這部分主要使用的模塊就是 socket 模塊,在這個模塊中可以找到 socket()函數(shù),該函數(shù)用于創(chuàng)建套接字對象,套接字也有自己的方法集,這些方法可以實現(xiàn)基于套接字的網(wǎng)絡(luò)通信。

socket()模塊函數(shù)

要創(chuàng)建套接字,必須使用 socket.socket()函數(shù),他一般的語法如下

socket(socket_family, socket_type, protocol=0)

其中socket_family是 AF_UNIX或 AF_INET,socket_type 是 SOCK_STREAM 或 SOCK_DGRAM,protocol 通常省略,默認=0.

所以創(chuàng)建 TCP/IP 套接字,可以使用下面的方式調(diào)用 socket.socket().

tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

同樣創(chuàng)建 UDP/IP 套接字,使用下面的方法調(diào)用

udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

創(chuàng)建 TCP 服務器

創(chuàng)建 TCP 服務器的流程基本如下,并非正真正的代碼

ss = socket()          #創(chuàng)建服務器套接字
    ss.bind()              #套接字與地址綁定
    ss.listen()             #監(jiān)聽連接
    inf_loop:             #服務器無限循環(huán)
        cs = ss.accepr()   #接受客戶端連接
        comm_loop:      #通信循環(huán)
            cs.recv()/cs.send()   #對話(接收/發(fā)送)
        cs.close()        #關(guān)閉客戶端套接字
    ss.close()            #關(guān)閉服務器套接字(可選)

實際中創(chuàng)建 TCP 服務器基本流程就如上邊所說,可能稍有不同但基本思路應該是相通的,下邊是真正穿件服務器的代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *      #將 socket 屬性引入到命名空間

HOST = ''          #這是對 bind()方法的標識表示可以使用任何可用的地址
PORT = 21571      #端口號
BUFSIZ = 1024     #緩沖區(qū)大小,1kb
ADDR = (HOST,PORT)   #地址????

tcpSerSocket = socket(AF_INET,SOCK_STREAM)    #創(chuàng)建 tcp 套接字
tcpSerSocket.bind(ADDR)           #將地址綁定到套接字上
tcpSerSocket.listen(5)            #設(shè)置并啟動套接字監(jiān)聽

while True:        #無限循環(huán),等待客戶端連接
  print('waiting for connection...')   
  tcpCliSocket,addr = tcpSerSocket.accept()    #被動接受客戶端連接     
  print('...connected from:',addr)

  while True:      #對話循環(huán),等待客戶端發(fā)送消息
    data = tcpCliSocket.recv(BUFSIZ)   #接收客戶端消息
    if not data:     #如果消息是空白,跳出對話循環(huán),關(guān)閉當前連接
      break
    tcpCliSocket.send(data)   #如果收到消息,將消息原封不動返回客戶端

  tcpCliSocket.close()
tcpSerSocket.close()

創(chuàng)建 TCP 客戶端

同上邊一樣,一個簡單的非代碼流程

cs = socket()    #創(chuàng)建客戶端套接字
    cs.connect()     #嘗試連接服務器
    comm_loop:     #通信循環(huán)
        cs.send()/cs.recv()  #對話(發(fā)送/接收)
    cs.close()       #關(guān)閉客戶端套接字

實際中創(chuàng)建客戶端也是翻譯上邊的步驟

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *

HOST = 'localhost'    #服務器的主機名
PORT = 21571     #端口號
BUFSIZ = 1024     #緩沖區(qū)
ADDR = (HOST,PORT)   #地址

tcpCliSocket = socket(AF_INET,SOCK_STREAM)  #創(chuàng)建客戶端套接字
tcpCliSocket.connect(ADDR)     #連接服務器

while True:        #通信循環(huán)
  data = input('> ')    #客戶端輸入信息
  if not data:   #如果輸入信息為空,則跳出循環(huán),關(guān)閉通信
    break

  data = str.encode(data)      
  tcpCliSocket.send(data)   #發(fā)送客戶端信息
  data = tcpCliSocket.recv(BUFSIZ)   #接受服務器返回信息
  if not data:    #如果服務器未返回信息,關(guān)閉通信循環(huán)
    break
  print('get:',data.decode('utf-8'))

tcpCliSocket.close()

當然,這只是最基礎(chǔ)的通信,而且關(guān)于主機名,端口號之類的東西暫時還不是很懂,目前所做的只是在同一臺電腦上通信,端口號也需要一致,如果不同的電腦進行通信該怎么做?我還只是個小白.....

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • python tkinter實現(xiàn)彩球碰撞屏保

    python tkinter實現(xiàn)彩球碰撞屏保

    這篇文章主要為大家詳細介紹了python tkinter實現(xiàn)彩球碰撞屏保,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python詞云展示庫wordcloud配置詳解

    Python詞云展示庫wordcloud配置詳解

    這篇文章主要介紹了Python詞云展示庫wordcloud配置詳解,詞云就是將詞語通過圖形可視化的方式,直觀和藝術(shù)的展示出來,詞云在我們的生活中經(jīng)常能夠看到,無論是中文的詞云還是英文的詞云,需要的朋友可以參考下
    2023-07-07
  • python 自定義異常和主動拋出異常(raise)的操作

    python 自定義異常和主動拋出異常(raise)的操作

    這篇文章主要介紹了python 自定義異常和主動拋出異常(raise)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • python列表生成器迭代器實例解析

    python列表生成器迭代器實例解析

    這篇文章主要介紹了python列表生成器迭代器實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 基于python實現(xiàn)坦克大戰(zhàn)游戲

    基于python實現(xiàn)坦克大戰(zhàn)游戲

    這篇文章主要為大家詳細介紹了基于python實現(xiàn)坦克大戰(zhàn)游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Python中json.dumps()和json.dump()的區(qū)別小結(jié)

    Python中json.dumps()和json.dump()的區(qū)別小結(jié)

    在Python中,json.dumps()和json.dump()是兩個常用的函數(shù),本文主要介紹了Python中json.dumps()和json.dump()的區(qū)別小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 詳解Python類的定義與實例

    詳解Python類的定義與實例

    這篇文章給大家介紹Python類的定義與實例,下面是一個使用?NewSpaceGraph?類的示例,展示了如何實例化該類并調(diào)用其方法,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 詳解Pandas 處理缺失值指令大全

    詳解Pandas 處理缺失值指令大全

    這篇文章主要介紹了詳解Pandas 處理缺失值指令大全,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • python簡單的函數(shù)定義和用法實例

    python簡單的函數(shù)定義和用法實例

    這篇文章主要介紹了python簡單的函數(shù)定義和用法,實例分析了Python自定義函數(shù)及其使用方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-05-05
  • Python實現(xiàn)監(jiān)控Nginx配置文件的不同并發(fā)送郵件報警功能示例

    Python實現(xiàn)監(jiān)控Nginx配置文件的不同并發(fā)送郵件報警功能示例

    這篇文章主要介紹了Python實現(xiàn)監(jiān)控Nginx配置文件的不同并發(fā)送郵件報警功能,涉及Python基于difflib模塊的文件比較及smtplib模塊的郵件發(fā)送相關(guān)操作技巧,需要的朋友可以參考下
    2019-02-02

最新評論