通過socket網路程式設計進行檔案傳輸

2021-10-03 12:33:14 字數 2834 閱讀 6256

socket(簡稱 套接字) 是程序間通訊的一種方式。在使用socket進行通訊測試時,我利用雙開pycharm分別作為服務端和客戶端,通過客戶端傳送資訊給服務端,服務端可以通過處理客戶端的資訊進行相關的操作。

首先建立客戶端:

import socket

s = socket.socket(socket.af_inet, socket.sock_stream)

s.connect(

('***.***.***.***'

,8080))

file_name =

input

('請輸入你想要的檔名:'

)t =

input

('是否是文字檔案(是輸入1 否輸入2)'

)s.send(file_name.encode(

'utf8'))

if t ==

'1':

ty =

'w'else

: ty =

'wb'

with

open

(file_name, ty)

asfile

:while

true

: data = s.recv(

1024)if

not data:

break

file

.write(data)

s.close(

)

s = socket.socket(socket.af_inet, socket.sock_stream)
這裡建立了套接字,

s.connect(

('***.***.***.***'

,8080

))

這裡是連線本地的ip位址以及自己定義的埠號,埠號應該去1024以上至65535之間

s.send(file_name.encode(

'utf8'

))

將需要從服務端獲取的檔名傳送給服務端。

if t ==

'1':

ty =

'w'else

: ty =

'wb'

這段**可以忽略,這是為了測試時寫的**,為了傳輸文字檔案和二進位制檔案而設定,如果要傳輸的是文字檔案應選擇**『w』只寫模式,如果是音訊,影象等二進位制檔案應取『wb』**模式。

with

open

(file_name, ty)

asfile

:while

true

: data = s.recv(

1024)if

not data:

break

file

.write(data)

ty就是上述**選擇讀寫格式的變數可直接認為它是**『wb』** 模式,因為我的**是傳輸的二進位制檔案,如果你想傳輸文字檔案自行改為**『w』** 即可。在將檔名傳送給服務端後,服務端會把所需檔案傳送給客戶端。s.recv用於接收tcp資料,資料以字串形式返回,bufsize指定要接收的最大資料量。括號裡的1024指1024個位元組即1k,如果資料大於1k不使用while迴圈迴圈讀取的話會導致資料丟失,從而資料接收失敗。直到data讀取為空時退出迴圈,在讀取的同時寫入資料到檔案中。最後關閉客戶端。

在服務端中,我們需要接收來自客戶端的請求,獲取客戶端傳送過來的檔名。

**如下:

import socket

s = socket.socket(socket.af_inet,socket.sock_stream)

s.bind((''

,8080))

s.listen(

128)

x,y= s.accept(

)file_name = x.recv(

1024

)data =

open

(file_name.decode(

'utf8'),

'rb'

)x.send(data.read())

s.close(

)

同樣,服務端也要建立套接字。與客戶端不同在於它需要繫結客戶端的埠,這是他們能互相通訊的標誌。

s.listen(

128)

這裡用於監聽從客戶端發過來的資訊。收到請求後,s.accept()返回值是乙個新的套接字描述符,它代表的是和客戶端的新的連線,可以把它理解成是乙個客戶端的socket,這個socket包含的是客戶端的ip和port資訊 。利用python拆包,想獲取的就是客戶端的ip位址,同樣利用recv獲取來自客戶端的訊息,這裡是客戶端發來的檔名。但是值得注意的是這裡是x.recv()而不是s.recv(),

data =

open

(file_name.decode(

'utf8'),

'rb'

)x.send(data.read(

))

通過獲取的檔名,我們來開啟服務端的檔案,之後將讀取的檔案傳送給x也就是客戶端。到此也就完成了服務端和客戶端的檔案傳輸,是不是很簡單?想看更多高階的網路程式設計,敬請期待噢!!!

網路程式設計 Socket程式設計

一 網路部分 1.ip 2.埠號 在網路協議中使用埠號識別主機上不同的程序,不同的埠對應於不同的服務 應用程式 3.協議 tcp二 socket部門socket通訊基本流程圖 根據socket通訊基本流程圖,總結通訊的基本步驟 伺服器端 第一步 建立乙個用於監聽連線的socket對像 第二步 用指定...

socket網路程式設計

首先認識乙個表示主機資訊的結構體 struct hostent h addrtype 這是表示主機所使用的位址型別的定義,在c語言winsock2.h標頭檔案中以 af 開頭的巨集定義就是它的值。如果使用的是ipv4,則值為 af inet 如果是ipv6,值為 af inet4 h length ...

Socket網路程式設計

socket 網路程式設計 在c free中建立乙個對話方塊工程,取名socket1,建立如下檔案結構 main.h ifndef main h define main h include bool winapi main proc hwnd hwnd,uint umsg,wparam wparam...