python之網路編程

來源:互聯網
上載者:User

標籤:介紹   str   位元組   服務端   執行   col   超過   output   import   

一、什麼是網路編程

  網路編程簡單來說就是對資訊的發送到接收,中間傳輸為物理線路的作用。

  在我們沒有學過網路編程之前,在應用上寫的代碼都是只能自己提供自己使用,不能與其他人互動。那麼如何?相互連信呢?

二、資料之間的相互連信

 1 服務端 2 import socket   #匯入socket通訊端模組 3 server = socket.socket()    #建立一個socket對象 4 server.bind(("192.168.13.132",8000))    #綁定IP與連接埠 5 server.listen(3)    #規定只允許不超過三人連結服務端 6 conn,addr = server.accept()     #建立媒介與用戶端地址 7 data = conn.recv(1024)      #建立一個變數,通過媒介接收用戶端傳輸過來的位元組並限制不超過1024 8 print(data)         #列印用戶端傳來的訊息 9 conn.send(b"123456")        #返回給用戶端的位元組10 conn.close()        #與伺服器取消連結11 server.close()      # 關閉伺服器的服務
1 # 用戶端2 import socket       #匯入socket模組3 client = socket.socket()      #建立一個socket對象4 client.connect(("192.168.13.132",8000))     #與服務端建立連結5 client.send(b"456789")      #向服務斷傳輸訊息(位元組型)6 data =client.recv(1024)     #接服務端傳來的訊息 不超過1024位元組7 print(data)         # 列印8 client.close()      #關閉用戶端

 三、網路編程的簡單應用

  類比ssh

    在沒有介紹代碼之前需要引入subprocess模組,subprocess是Python 2.4中新增的一個模組,它允許你產生新的進程,串連到它們的 input/output/error 管道,並擷取它們的返回(狀態)碼

  我們需要學會一下代碼就足夠了

1 import subprocess2 res = subprocess.Popen("ipconfig",3                        shell= True,4                        stderr=subprocess.PIPE,5                        stdout=subprocess.PIPE6 7                       )8 print(res.stdout.read().decode("gbk"))

  建立服務端

 1 # 服務端 2 import socket 3 import subprocess 4 server = socket.socket() 5 server.bind(("192.168.13.132",8000)) 6 server.listen(3) 7 print("建立連結中。。。") 8 conn,addr = server.accept() 9 print("等待響應中。。。")10 while True:11     cmd = conn.recv(1024).decode("utf-8")12     res = subprocess.Popen(cmd,13                                shell= True,14                                stderr=subprocess.PIPE,15                                stdout=subprocess.PIPE16                               )17     result = res.stdout.read()18     print("響應長度為%s" % len(result))19     conn.send(result.decode("gbk").encode("utf-8"))

  建立用戶端

# 用戶端import socketclient =socket.socket()client.connect(("192.168.13.132",8000))while True:    user_input = input("請輸入dose命令")    client.send(user_input.encode("utf-8"))    result = client.recv(1024).decode("utf-8")    print(result)

四、黏包現象

  黏包現象就是同時執行多條命令之後,得到的結果很可能只有一部分,在執行其他命令的時候又接收到之前執行的另外一部分結果,這種顯現就稱之為黏包。

  只有tcp協議會出現黏包現象,dcp協議不會出現。

  

  

 

   解決黏包的理想方案:

  

 1 # 服務端 2 import socket    #通訊端模組 3 import subprocess 4 import struct 5 server = socket.socket() 6 server.bind(("192.168.13.132",8000)) 7 server.listen(3) 8 print("建立連結中。。。") 9 conn,addr = server.accept()10 print("等待響應中。。。")11 while True:12     cmd = conn.recv(1024).decode("utf-8")13     res = subprocess.Popen(cmd,14                                shell= True,15                                stderr=subprocess.PIPE,16                                stdout=subprocess.PIPE17                               )18     result = res.stdout.read()19     error = res.stderr.read()20     print("響應長度為%s" % len(result))21     print("錯誤資訊為%s" % error.decode("gbk"))22     if error:23         back_message = error24     else:25         back_message = result26     conn.send(struct.pack("i", len(back_message)))  # 構建前序27     conn.send(back_message)  # 發送資料
 1 # 用戶端 2 import socket 3 import struct 4 client =socket.socket() 5 client.connect(("192.168.13.132",8000)) 6 while True: 7     user_input = input("請輸入dose命令") 8     client.send(user_input.encode("utf-8")) 9     maxbytes = client.recv(4)10     long = struct.unpack("i",maxbytes)[0]11     num = 012     data = b""13     while num < long:14         receive = client.recv(1024)15         data +=receive16         num +=len(receive)17     print(data.decode("gbk"))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

python之網路編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.