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...