1. 程式人生 > >2018.11.2

2018.11.2

"""
學習網路程式設計 其實就是在學socket

socket是什麼?
翻譯過來稱為套接字
是對底層的 TCP IP UDP 等網路協議進行封裝
使得上層的應用程式開發者,不用直接接觸這對複雜,醜陋的協議
在程式設計師的言論,他就是一個封裝好的模組!
要完成網路通訊,只需要使用系統提供的socket模組就行

 

TCP和UDP是傳輸層最常見的協議
主要控制傳輸資料的方式
TCP的傳輸方式
優點:通過三次握手來與伺服器建立連線
可以保證資料的完整性
a機器給b機器傳送資料包 要求b機器必須立即返回一個確認包
a機器會等待一段時間,如果超時還沒有收到確認,則重發資料
缺點:傳輸效率低
使用場景: 文字聊天,支付寶轉賬等,
UDP
傳輸方式:不需要建立連線,直接傳送
缺點: 不能保證資料的完整性
優點:傳輸效率比TCP高
使用場景:視訊通話,語音通話,UDP

 

python中的socket

在使用socket的時候使用者需要關心的是 ip地址,port埠, 傳輸協議TCP/UDP,你要傳送的資料data

在寫網路程式設計的時候,必然是有兩臺程式碼,對應著客戶端和伺服器

使用socket來完成TCP通訊
應該先完成伺服器的程式碼編寫

"""
UDP互動
伺服器
import socket
# 1.建立socket物件
s = socket.socket(type=socket.SOCK_DGRAM)

# 2.繫結埠和ip
s.bind(("127.0.0.1",10000))

while True:
# 3.接受資料
res = s.recv(1024)
print(res)

while True:
msg = input(">>>:")
# 需要獲取對方的ip和埠
#s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000))

# 關閉資源
s.close()

客戶端
import socket
# 1.建立socket物件
c = socket.socket(type=socket.SOCK_DGRAM)
while True:
msg = input(">>>:")
c.sendto(msg.encode("utf-8"),("127.0.0.1",10000))

c.close()

簡單的互相聊天程式 TCP
客戶端
import socket

client = socket.socket()

client.connect(("127.0.0.1",65535))

while True:
# 傳送
client.send(input(">>>:").encode("utf-8"))

# 接收
data = client.recv(1024).decode("utf-8")
print(data)
if len(data) == 0:
client.close()
break

"""
正常的聊天的程式 客戶端傳送的資料 先發送到伺服器端 伺服器端把訊息轉發給你的目標好友


"""
伺服器
import socket

server = socket.socket()
server.bind(("127.0.0.1",65535))
server.listen(5)

client, c_address = server.accept()

while True:
data = client.recv(1024).decode("utf-8")
print("收到來自客戶端的資料:",data)
# 如果對方發來一個over 我就關閉連線
if data == "over":
client.close()
break
# 把對方傳過來的資料轉換為大寫 在發回去!
client.send(data.upper().encode("utf-8"))

# 關閉伺服器端
server.close()

# 需求 客戶端輸入cmd命令 傳送給伺服器執行 伺服器執行(subprocess)完後返回 執行結果