wpf 網(wǎng)站開發(fā)百度云網(wǎng)盤資源
- IP地址
- IPv4
- IPv6
- 查看本機(jī)的IP地址
- win
ipconfig
- linux
ifconfig
- win
- ping命令
ping www.baidu.com
查看是否能連通指定的網(wǎng)站ping 192.168.1.222
查看是否能連通指定的IP
- Port端口
- 0-65535
- TCP/IP協(xié)議
- 傳輸數(shù)據(jù)之前要建立連接,通過三次握手建立:
- 客戶端 --> 服務(wù)端 ,SYN 客戶端告訴服務(wù)端我是誰
- 服務(wù)端 --> 客戶端 , ACK + SYN
- 服務(wù)端告訴客戶端我收到了你的SYN(ACK)
- 服務(wù)端告訴客戶端我是誰 (SYN)
- 客戶端 --> 服務(wù)端 ,ACK
- 服務(wù)端告訴客戶端我收到了你的SYN ,同時(shí)確認(rèn)你收到了我的SYN(ACK)
- 開始傳輸數(shù)據(jù) 報(bào)文+內(nèi)容
- 報(bào)文類似元數(shù)據(jù),描述數(shù)據(jù)從哪來、到哪去,數(shù)據(jù)大小、數(shù)據(jù)類型等
- 內(nèi)容:byteString類型,即bytes
- 傳輸數(shù)據(jù)之前要建立連接,通過三次握手建立:
bytes和str類型的互相轉(zhuǎn)換
a = '哈薩克斯坦@#$%^&*(abc'
# str -> bytes類型(byte String)
# 按照utf8的格式,將str轉(zhuǎn)為byteString類型
a_bytes = a.encode() # 默認(rèn)utf8
print(a_bytes)# bytes類型 -> str
a = a_bytes.decode() # 默認(rèn)utf8
print(a)""" b'\xe5'
bytes 字節(jié)類型字符串 只是為了方便網(wǎng)絡(luò)通訊 16進(jìn)制數(shù)字來表述符號
【b】 表示bytes
【\xe5】 表示后邊兩個(gè)字符是16進(jìn)制數(shù)字
"""# 按照gbk的格式,將str轉(zhuǎn)為byteString類型
b_bytes = a.encode('gbk')
print(b_bytes)
b = b_bytes.decode('gbk') # bytes類型 -> str
print(b)# bytes數(shù)據(jù)一定可以轉(zhuǎn)換為字符串嗎???
# 不一定(比如:圖片、視頻、音頻等)
- TCP服務(wù)端代碼
跨服務(wù)器測試時(shí):
- 服務(wù)端代碼和客戶端代碼必須在同一個(gè)網(wǎng)段之內(nèi)!
- 服務(wù)端綁定ip時(shí),請使用
0.0.0.0
;對應(yīng)的客戶端代碼要連接的ip寫服務(wù)端的IP
"""TCP 服務(wù)端"""
import socket# ① 創(chuàng)建一個(gè)服務(wù)端socket套接字,負(fù)責(zé)接收客戶端的請求(門迎)
# socket.AF_INET:使用IPV4的地址
# socket.SOCK_STREAM:使用TCP協(xié)議
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# ② 綁定服務(wù)端的ip地址和端口號
# ('ip地址', 端口號)
# server_socket.bind(('127.0.0.1', 8080))
server_socket.bind(('192.168.25.76', 8080))# ③ 設(shè)置服務(wù)端進(jìn)入監(jiān)聽狀態(tài)
# 服務(wù)端同一時(shí)間支持多少個(gè)客戶端向它發(fā)起連接請求
server_socket.listen(128)# ④ 服務(wù)端等待客戶端進(jìn)行連接
print('服務(wù)端等待接收客戶端的請求...')# 沒有客戶端來連接服務(wù)端時(shí),accept方法會阻塞等到,直到有客戶端來連接,accept才會返回
# service_client_socket:也是一個(gè) socket 對象,負(fù)責(zé)和對應(yīng)的客戶端進(jìn)行通信(服務(wù)員)
# ip_port:是一個(gè)元祖,包含的是客戶端的ip和port
service_client_socket, ip_port = server_socket.accept()
print(f'服務(wù)端來自{ip_port}客戶端的連接...')# ⑤ 服務(wù)端接收客戶端發(fā)送的數(shù)據(jù)
# 如果客戶端沒有給服務(wù)端發(fā)送消息,recv也會阻塞等待
recv_msg = service_client_socket.recv(1024) # bytes
print(f'接收到來自客戶端的消息:{recv_msg.decode()}')# ⑥ 服務(wù)端給客戶端回應(yīng)數(shù)據(jù)
send_msg = input('請輸入給客戶端回應(yīng)的消息:') # str
service_client_socket.send(send_msg.encode())# ⑦ 關(guān)閉服務(wù)端的 socket
service_client_socket.close()
server_socket.close()
- TCP客戶端代碼
"""TCP客戶端"""
import socket# ① 創(chuàng)建一個(gè)客戶端的 socket 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# ② 通過客戶端 socket 連接服務(wù)端
client_socket.connect(('192.168.25.76', 8080))# ③ 發(fā)送消息給服務(wù)端
send_msg = input('請輸入發(fā)送給服務(wù)端的消息:')
client_socket.send(send_msg.encode())# ④ 接收服務(wù)端回應(yīng)的消息
recv_msg = client_socket.recv(1024) # bytes
print(f'接收到來自服務(wù)端的消息:{recv_msg.decode()}')# ⑤ 關(guān)閉客戶端 socket
client_socket.close()