socket的工作流程:
伺服器端先初始化socket,然後與埠繫結(bind),對埠進行監聽(listen),呼叫accept阻塞,等待客戶端連線。
客戶端初始化乙個socket,然後連線伺服器(connect),如果連線成功,這時客戶端與伺服器端的連線就建立了。
客戶端傳送資料請求,伺服器端接收請求並處理請求,然後把回應資料傳送給客戶端,客戶端讀取資料,最後關閉連線,一次互動結束。
tcp和udp的區別:
tcp是面向連線的,可靠的(網路傳輸中丟失的資料報會被檢測到並重新傳送),有序的(資料按傳送者寫入的順序被讀取)。
udp是面向無連線的,不可靠,無序的。
import socket
def main():
#1.建立tcp套接字
tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)
#2.獲取伺服器的ip/port
server_ip = input("請輸入伺服器端的ip:")
server_port =int(input("請輸入伺服器的埠號:"))
server_address = (server_ip,server_port)
#3.連線到伺服器
tcp_socket.connect(server_address)
#5.將檔名傳送給伺服器
tcp_socket.send(down_file.encode("utf-8"))
#6.接收檔案中的資料
recv_data = tcp_socket.recv(1024) #1024:檔案大小
#7.儲存接收到的資料到檔案中
if recv_data: #recv_data中沒有資料時,if 0:不執行if下的**塊
with open("[附件]"+down_file,"wb") as f:
f.write(recv_data)
#8.關閉套接字
tcp_socket.close()
if __name__ == "__main__":
main()
import socket
def bind_listen(tcp_socket):
# 繫結資訊(bind)
tcp_socket.bind(("", 7896))
# 監聽(listen)
def send_file(new_client,other_client):
"""給客戶端傳送檔案及判斷"""
file_name = new_client.recv(1024).decode("utf-8")
#開啟檔案並且讀取資料
#假設檔案為空
file_content = none
try:
f = open(file_name,"rb") #rb:以唯讀方式開啟二進位制檔案
file_content = f.read()
f.close()
except exception as ret:
print("沒有要開啟的檔案:%s"%file_name)
if file_content:
#傳送檔案的資料給客戶端呢
new_client.send(file_content)
def main():
#建立套接字(socket)
tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)
bind_listen(tcp_socket)
while true:
#等待new_client,other_client = tcp_socket.accept()
#呼叫傳送檔案的函式,給客戶端服務
send_file(new_client,other_client)
#關閉客戶端套接字
new_client.close()
#關閉伺服器套接字
other_client.close()
if __name__ == "__main__":
main()
Python中網路程式設計之TCP
tcp是一種面向連線的 可靠的 基於位元組流的傳輸層通訊協議,python 實現 伺服器端 步驟見注釋.import socket 網路之間傳輸是二進位制形式的,注意編碼和解碼 建立伺服器 sever socket.socket socket.af inet,socket.sock stream 繫...
網路程式設計之TCP程式設計
tcp程式設計中,如果要完成通訊,通訊雙方必須要建立socket,通過socket完成通訊。tcp通訊步驟 1 伺服器啟動serversocket作為通訊的server端,等待客戶端鏈入。2 客戶端建立socket作為通訊的client端 3 client端鏈入server端後建立可靠的 雙向的 持...
python網路程式設計之基於udp的簡易聊天室實現
為了讓兩個程式通過網路進行通訊,二者必須使用socket套接字 udp是面向訊息的協議,通訊時不需要建立連線,因此比較靈活,同時傳輸也是不可靠的。udp通訊模型如下 udp client.py 如下 import socket 匯入socket模組 s socket.socket socket.af...