python實現網路通訊

2021-10-05 14:47:23 字數 2406 閱讀 9885

不管是哪種方式實現網路連線,都需要使用socket,在使用前都需要建立socket物件。

#1、建立socket物件

a_socket = socket.socket(socket.af_inet,socket.socket_stream)

#使用ipv4的第乙個引數都選擇socket.af_ine

#第二引數是選擇通訊模式,使用udp通訊選擇socket.sock_dgram

#使用tcp通訊選擇so`在這裡插入**片`cket.sock_stream

udp是不可靠方式,無需建立連線,直接傳送,不管是否能夠接收。

#udp直接使用sendto方法來進行傳送

udp_socket,sendto(send_data.encode(

"utf-8"),

("192.168.49.130"

,8088))

#傳入的引數有傳送的資料和(目的位址和目的埠號)

#接收資料時要先繫結埠號後,呼叫recvfrom方法接收資料

recv_data = udp_recv_socket.recvfrom(

1024

)#1024代表最大接收資料為1023位元組

#返回的是乙個元祖

#recv[0]存放的時接收到的資料

#recv[1]存放的是傳送端的ip位址和埠號

tcp相較與udp穩定得多,在兩端通訊之前都要先經過三次握手建立連線後才可以相互傳送訊息,並且在收到對端的訊息時,有收到應答。

# 1.首先呼叫connect方法與服務端建立連線

tcp_socket.connect(

("10.1.30.12"

,8088))

# 2.呼叫send方法來傳送資料,只需傳入傳送的資料

tcp_socket.send(send_msg.encode(

'utf-8'))

# 3.呼叫recv方法可以用來接收資料,在沒有收到資料時回阻塞在這個地方

recv_data = tcpsend_socket.recv(

1024

)

# 1.繫結位址和埠

tcp_socket.bind((''

,8088))

# 2.設定套接字為被動連線

tcp_socket.listen(

128)

while

true

:# 3.使用accept()方法監聽客戶端連線,沒有客戶端連線時處於阻塞狀態,

# 返回值的是乙個元組,new_socket是新收到的這個連線的socket物件

# client_addr 是乙個元組,包含客戶端的ip和埠號

new_socket, client_addr = tcp_socket.accept(

)while

true

:try

: recv_data = new_socket.recv(

1024

)except connectionreseterror as e:

print

("連線意外中斷:"

, e)

break

iflen

(recv_data)==0

:#recv()的返回值為空時,代表對端主動關閉連線

print

("客戶端請求中斷"

)break

new_socket.close(

)tcp_socket.close(

)

tcp通訊可分為兩類:長連線與短連線。顧名思義,短連線就是在每次通訊前都先建立連線,完成資料傳送後,就斷開連線。長連線就是一直連線著,有資料通訊時直接傳送資料,無需再次建立連線。

當有一端呼叫close()方法斷開連線時,另一端的recv方法會解堵塞,不過收到的資料為空,可通過判斷收到的資料為空判別另一端呼叫close方法斷開了連線。在遇到異常情況,如網路異常斷開時,呼叫recv()和send()方法都會報錯,可通過錯誤處理來判別網路異常斷開。

import urllib.request

"" #1 直接使用urlretrieve方法

urllib.request.urlretrieve(file_url, filename=file_name)

#2 使用urlopen方法讀取後,再寫到檔案中

req = urllib.request.urlopen(file_url)

file_content = req.read(

)with

open

(file_name,

"wb"

)as f:

f.write(file_content)

python實現socket網路通訊

1.traceback 跟蹤異常返回資訊 2.s socket.socket 建立socket,af inet定義domain為ipv4,sock dgram定義了socket的type。3.setsockopt 讓socket允許位址重用,當定義多個socket時,可以將多個socket繫結到乙個...

python網路通訊

import urllib 網路通訊模組 from urllib import request def url,ispicture false 預設引數 param url param ispicture return none,直接儲存為檔案,不需要返回值 file name url.split ...

python 使用socket實現網路通訊

1.服務端 import socket import threading import sys def socket service try 建立socket物件,使用ipv4協議 tcp通訊鏈結 s socket.socket socket.af inet,socket.sock stream 防...