今日思維導圖
每日代碼
udp聊天器
import socket
"""
這段代碼可以實現循環進行收發消息,但是同一時間只能進行一個動作
"""
def send_msg(udp_socket):
"""發送數據"""
# 發送數據
client_ip = input("請輸入對方ip: ")
client_port = int(input("請輸入對方端口:"))
send_data = input("請輸入要發送的內容:")
# 發送數據,使用encode進行編碼,ip和端口要放在元組中
udp_socket.sendto(send_data.encode("utf-8"), (client_ip, client_port))
def recv_msg(udp_socket):
"""接收數據"""
# 接收數據 ,需要指定要接收的字節,1024就是 1KB
recv_data = udp_socket.recvfrom(1024)
# recvfrom返回的數據時一個元組,第一個元素是地址,第二個元素是接收到的消息
# 使用decode 進行解碼
print("%s: %s" % (str(recv_data[1]), recv_data[0].decode("utf-8")))
def main():
# 創建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 綁定本地信息,可以知道ip和端口
udp_socket.bind(("", 6666))
while True:
print("---udp聊天器---")
print("1. 發送數據")
print("2. 接收數據")
print("0. 退出")
op = input("請輸入要進行的操作")
if op == "1":
# 調用發送數據的函數
send_msg(udp_socket)
elif op == "2":
# 調用接收數據的函數
recv_msg(udp_socket)
elif op == "0":
break
else:
print("輸入有誤,請重新輸入")
udp_socket.close()
if __name__ == "__main__":
main()
tcp服務器代碼
import socket
"""tcp服務器"""
def main():
# 創建套接字, tcp的參數時SOCK_STREAM
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 綁定本地地址, 本地地址和端口可能需要重新指定
tcp_socket.bind(("", 6666))
# 由主動變成被動接聽, listen方法可以指定同時連接的客戶端
tcp_socket.listen(128)
while True:
# 循環接聽客戶
# 等待客戶端連接, 當有客戶連接,accept方法返回一個元組
# 元組第一個元素是一個新的套接字,只針對于當前連接的這個客戶端;第二個元素是客戶端地址
colient_socket, colient_addr = tcp_socket.accept()
# 接收數據
print(colient_addr)
while True:
# 循環和同一個客戶端聯系
colient_data = colient_socket.recv(1024)
print(colient_data.decode("utf-8"))
if colient_data:
# 進行判斷,只有客戶端還在發送數據,就返回一個數據給客戶端
# 發揮一部分數據給客戶端
colient_socket.send("嘿嘿嘿".encode("utf-8"))
else:
# 沒有數據就
break
# 關閉套接字
colient_socket.close()
tcp_socket.close()
if __name__ == "__main__":
main()
tcp客戶端代碼
import socket
"""tcp客戶端"""
def main():
# 創建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 鏈接服務器, tcp客戶端需要先鏈接服務器
tcp_socket.connect(("192.168.xxx.xxx", 6666))
while True:
# 循環和服務器聯系
# 發送數據
print("輸入【exit】退出鏈接")
send_data = input("請輸入要發送的數據:")
if send_data == "exit":
break
tcp_socket.send(send_data.encode("utf-8"))
# 接收服務器返回的數據
server_data = tcp_socket.recv(1024)
print(server_data.decode("utf-8"))
# 關閉套接字
tcp_socket.close()
if __name__ == "__main__":
main()
在 tcp 這里碰見了一個奇怪的BUG
服務器和客戶端運行起來后,輸入正常數據沒有問題,當只輸入一個回車時,程序不發送數據也不接受數據只能強行接受,問了下,沒有解決,這玩意好像是因為操作系統底層的原因, 后面再研究研究。
今天內容需要記憶和理解都比較多,不過還算可以接受。
最近在試著使用 Typora 練習 Markdown 寫作方式,不是很熟練,寫出來有點亂,慢慢練習熟練了再使用這種方式吧。
-
UDP
+關注
關注
0文章
326瀏覽量
33989 -
python
+關注
關注
56文章
4798瀏覽量
84801
發布評論請先 登錄
相關推薦
評論