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

Pythony運維入門之Socket網(wǎng)絡(luò)編程詳解

 更新時間:2019年04月15日 16:39:29   作者:TK黃金右手  
這篇文章主要介紹了Pythony運維入門之Socket網(wǎng)絡(luò)編程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Socket是什么?

Socket 是電腦網(wǎng)絡(luò)中進(jìn)程間數(shù)據(jù)流的端點Socket 是操作系統(tǒng)的通信機制應(yīng)用程序通過Socket進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的傳輸

首先,簡單了解一下TCP通信過程:

TCP三次握手(面試??迹?br /> 第一次握手:客戶端 發(fā)送SYN報文,設(shè)置隨機數(shù)序號X,服務(wù)器由SYN=1知道,客戶端要求建立聯(lián)機

第二次握手:服務(wù)器端接收到客戶端的報文之后,經(jīng)過處理,返回給客戶端SYN+ACK報文,同時設(shè)置隨機序號Y,此時返回的報文確認(rèn)ACK=X+1

第三次握手:接收到報文的客戶端,會在處理確認(rèn)之后,再發(fā)送一個報文給服務(wù)器端,此時確認(rèn)為ACK=Y+1

服務(wù)器端接收到客戶端發(fā)送的報文之后,會在服務(wù)器端與客戶端形成一種通路,此后的數(shù)據(jù)就可以在這個通路上就可以傳輸。

Socket使用TCP協(xié)議的通信過程與上述相當(dāng)類似:


Socket通信方式

Socket分為TCP和UDP兩種不同的通信方式

為什么選擇 Socket?

Socket是基礎(chǔ)應(yīng)用,適應(yīng)多種網(wǎng)絡(luò)協(xié)議,服務(wù)器的傳輸大量涉及網(wǎng)絡(luò)協(xié)議,離不開Socket的應(yīng)用

以下編寫簡單的服務(wù)器和客戶端程序(以本機為例):
服務(wù)器端程序:

導(dǎo)入socket模塊(需要預(yù)先pip)
import socket
#創(chuàng)建實例
sk = socket.socket()  #鼠標(biāo)放在內(nèi)建函數(shù)上,Ctrl+B,可以查看源碼
ip_port = ("127.0.0.1",8888)  #綁定ip和port,以本機(127.0.0.1)和其他端口(8888)為例
sk.bind(ip_port)  #綁定監(jiān)聽
sk.listen(5)  #最大連接數(shù),大多數(shù)程序設(shè)置5足夠

print("正在接受數(shù)據(jù)")  #打印一行提示信息

conn,address =sk.accept()  #接收數(shù)據(jù)
msg ="hello world" #定義數(shù)據(jù)
conn.send(msg.encode())  #返回信息 , python3發(fā)送和接收網(wǎng)絡(luò)數(shù)據(jù)是byte類型,如果發(fā)送的是str類型就需要進(jìn)行編碼
conn.close()  #關(guān)閉連接

客戶端程序:

#導(dǎo)入socket模塊
import socket

client = socket.socket() #實例初始化
ip_port = ("127.0.0.1", 8888) #訪問服務(wù)器端的ip和端口

client.connect(ip_port) #連接服務(wù)器
data = client.recv(1024) #接收服務(wù)器信息
print(data.decode()) #打印信息,python3是傳輸byte類型 ,需要編碼。

實現(xiàn)socket客戶端一次連接中連續(xù)消息發(fā)送:

server端:

#導(dǎo)入socket模塊
import socket
import random

sk=socket.socket() #創(chuàng)建實例
ip_port =("127.0.0.1",8888) #定義綁定IP和port
sk.bind(ip_port) #綁定監(jiān)聽
sk.listen(5) #設(shè)置最大連接數(shù)

while True:  #連續(xù)接收數(shù)據(jù)
 print("正在等待接收數(shù)據(jù)。。。。。")  #提示信息
 server,address=sk.accept() #接收數(shù)據(jù)
 msg='歡迎來到socket世界'  #定義信息
 server.send(msg.encode())  #返回信息
 while True:    #連續(xù)接受客戶端發(fā)送的消息
   data=server.recv(1024)  #接收客戶端信息
   print(data.decode())  #打印獲取的數(shù)據(jù),實際開發(fā)生產(chǎn)一般不打印
   if data == b'exit':    #接收到退出命令
    break
   sever.send(data.encode())  #處理客戶端數(shù)據(jù)
   sever.send(str(random.randint(1,50000)).encode())   #發(fā)送隨機數(shù)據(jù)信息
 conn.close()  #主動關(guān)閉連接

client端:

import socket #導(dǎo)入模塊

client=socket.socket()  #實例初始化
ip_port =("127.0.0.1",8888) #訪問服務(wù)端IP和端口
client.connect(ip_port)  #連接sever端

while True:         #定義循環(huán),發(fā)送消息
  date = client.recv(1024)   # 接收sever端信息
  print(data.decode())   # 打印接收數(shù)據(jù)
  
  msg_input=input("請輸入發(fā)送的信息:")  #輸入發(fā)送的信息
  client.send(msg_input.encode())   #消息發(fā)送
  if msg_input == "exit":     #接收到退出命令
  break
  
  data= client.recv(1024)    #接收sever端信息
  print(date.decode())     #打印接收的消息

上述是一個客戶端連接服務(wù)器,接下來介紹多個客戶端連接服務(wù)器:

首先對socket參數(shù)進(jìn)行了解:

參數(shù)一:family地址簇


參數(shù)二:type類型


參數(shù)三:proto協(xié)議號

socket UDP通信:

服務(wù)器端:

import socket

sk = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port = ("127.0.0.1",8888)
sk.bind(ip_port)
while True:
  data = sk.recv(1024)
  print(data.decode()) #bytes--->(decode)--->str

客戶端:

import socket

client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
in_port = ("127.0.0.1",8888)

while True:
  msg_input = input("輸入需要發(fā)送的信息:")
  if msg_input == "exit":
   break
  client.sendto(msg_input.encode(),in_port)  # str--->(encode)--->bytes
client.close()

socket非阻塞模塊:

前面談到的實例程序TCP socket存在阻塞,python能否實現(xiàn)非阻塞TCP通信,顯然是可以的,不然python也不會發(fā)展這么強大。

實現(xiàn)途徑:導(dǎo)入socketsever ,用多線程的方式實現(xiàn)非阻塞——繼承socketsever對象重載setup、handle、finish方法。

import socketserver
#定義一個類
class Myserver(socketserver.BaseRequsetHandler):
 #如果handle方法報錯,則會跳過
 #setup和finish方法無論如何都會執(zhí)行
 #首先執(zhí)行setup方法
 def setup(self):
  pass
 #然后執(zhí)行handle方法
 def handle(self):
  #定義連接變量
  conn = self.request
  msg='歡迎來到socket世界'  #定義信息
  conn.send(msg.encode())  #返回信息
  while True:    #連續(xù)接受客戶端發(fā)送的消息
   data=conn.recv(1024)  #接收客戶端信息
   print(data.decode())  #打印獲取的數(shù)據(jù),實際開發(fā)生產(chǎn)一般不打印
   if data == b'exit':    #接收到退出命令
    break
   conn.send(data.encode())  #處理客戶端數(shù)據(jù)
   conn.send(str(random.randint(1,50000)).encode())   #發(fā)送隨機數(shù)據(jù)信息
  conn.close()
 #最后執(zhí)行finish方法 
 def finish(self):
  pass

if name == "__main__":
 #創(chuàng)建多線程實例
 server = socketserver.ThreadingTCPServer((“127.0.0.1",8888),Myserver)
 #開啟異步多線程,等待連接
 server.serve_forever()`

然后用之前的TCP客戶端程序?qū)崿F(xiàn)非阻塞多客戶端通信

實例——文件上傳程序:

運維通常會遇到文件上傳的情況,同時沒有第三方軟件的時候,這個時候我們 可以自己實現(xiàn)文件上傳
文件接收端(server):

import socket

sk = socket.socket() 
ip_port = ("127.0.0.1",9999)  
sk.bind(ip_port)  
sk.listen(5) 
while True:
 conn,adress = sk.accept()
 with open("file","ab") as f: #ab可添加二進(jìn)制模式
  data = conn.recv(1024)
  if data == b"exit":
   break
  f.write(data)
sk.close()

文件發(fā)送端(本機)(client):

import socket
#發(fā)起連接
sk = socket.socket() 
ip_port = ("127.0.0.1", 9999) #服務(wù)器的端口
sk.connect(ip_port) 
#打開文件 
with open(”test.py“,”rb“) as f:
 for i in f:
  sk,send(i)
sk.send("exit",encode()) #結(jié)束信號

以上所述是小編給大家介紹的Pythony運維入門之Socket網(wǎng)絡(luò)編程詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • python 如何獲取元素在array中的下標(biāo)

    python 如何獲取元素在array中的下標(biāo)

    這篇文章主要介紹了python 獲取元素在array中的下標(biāo)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 利用python實現(xiàn)JSON文檔與Python對象互相轉(zhuǎn)換

    利用python實現(xiàn)JSON文檔與Python對象互相轉(zhuǎn)換

    這篇文章主要介紹了利用python實現(xiàn)JSON文檔與Python對象互相轉(zhuǎn)換,通過對將一個JSON文檔映射為Python對象問題的展開介紹主題內(nèi)容,需要的朋友可以參考一下
    2022-06-06
  • WxPython界面利用pubsub如何實現(xiàn)多線程控制

    WxPython界面利用pubsub如何實現(xiàn)多線程控制

    這篇文章主要介紹了WxPython界面利用pubsub如何實現(xiàn)多線程控制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python中各種常見文件的讀寫操作與類型轉(zhuǎn)換詳細(xì)指南

    python中各種常見文件的讀寫操作與類型轉(zhuǎn)換詳細(xì)指南

    這篇文章主要為大家詳細(xì)介紹了python中各種常見文件(txt,xls,csv,sql,二進(jìn)制文件)的讀寫操作與類型轉(zhuǎn)換,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • pandas to_excel 添加顏色操作

    pandas to_excel 添加顏色操作

    這篇文章主要介紹了pandas to_excel 添加顏色操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python中Pexpect庫的使用

    Python中Pexpect庫的使用

    本文主要介紹了Python中Pexpect庫的使用,我們討論了 pexpect 的三種方法,它們可用于執(zhí)行不同的功能,并且它們可以一起使用以使其成為一個大函數(shù),感興趣的可以了解下
    2023-10-10
  • python內(nèi)存管理分析

    python內(nèi)存管理分析

    這篇文章主要介紹了python內(nèi)存管理,較為詳細(xì)的分析了Python的內(nèi)存管理機制,需要的朋友可以參考下
    2015-04-04
  • Python數(shù)據(jù)可視化之環(huán)形圖

    Python數(shù)據(jù)可視化之環(huán)形圖

    這篇文章主要介紹了Python數(shù)據(jù)可視化之環(huán)形圖,主要使用兩種不同的方式來可視化環(huán)形圖,并均給出了完整的代碼示例。需要的朋友可以參考一下,希望對你的工作和學(xué)習(xí)有所幫助
    2022-01-01
  • Python 可變類型和不可變類型及引用過程解析

    Python 可變類型和不可變類型及引用過程解析

    這篇文章主要介紹了Python 可變類型和不可變類型,以及其引用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 基于Flask實現(xiàn)一個智能的多語言Hello World服務(wù)器

    基于Flask實現(xiàn)一個智能的多語言Hello World服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了如何使用Flask框架創(chuàng)建一個智能的多語言Hello World服務(wù)器,能夠自動檢測訪問者的瀏覽器語言設(shè)置,需要的可以了解下
    2025-03-03

最新評論

沐川县| 桃园市| 都昌县| 连云港市| 苍南县| 黄龙县| 丰顺县| 江永县| 佛学| 甘肃省| 遂昌县| 定西市| 晋州市| 旺苍县| 右玉县| 宁远县| 宜宾县| 油尖旺区| 虎林市| 万宁市| 什邡市| 南溪县| 越西县| 江孜县| 晋宁县| 禹城市| 桐乡市| 海宁市| 凌海市| 迁安市| 维西| 丹巴县| 尚义县| 岳西县| 山西省| 卢湾区| 苍南县| 铜陵市| 昔阳县| 镇原县| 东安县|