天天看點

用python寫一個簡單的udp套接字聊天器

因為不用線程的話隻能做到半雙工(~ _ ~),是以今天就先做一個簡單(簡陋)的聊天器吧…

至于實驗條件,如果你用的是Linux的話,就開兩個終端(快捷鍵: Ctrl + Shift + t),把一份程式複制成兩份(要改代碼裡你綁定的端口喲~)分别運作在兩個終端上,由于ip位址不能重複,是以你可以把其中一個程式的目的ip寫為本機的回環(127.0.0.1)。

如果你用的是Windows的話,同樣你可以在Pycharm上把程式複制一遍作為你要練習的目标運作并連接配接。當然要是你有兩台電腦的話也可以在另一個電腦上運作此程式,前提是你的兩台電腦要在同一個網絡下喲~

如果你是用自己虛拟機裡的Linux和Windows相連接配接的話,要注意了,Windows用的編碼就不是utf-8了,而是gbk。是以在Windows裡寫的程式就應該是encode(“gbk”).

ubuntu效果圖
用python寫一個簡單的udp套接字聊天器
用python寫一個簡單的udp套接字聊天器
假設場景:小紅和小輝在互發消息:

小紅的電腦:

import socket

# 發送消息
def send_mes(udp_socket):
	# 目标端口
	ip_addr = input("請輸入目的ip:")
	ip_port = int(input("請輸入目的端口:")) # 端口要求為數字int()更正格式
	msg_data = input("請輸入内容:")
	udp_socket.sendto(msg_data.encode("utf-8"),(ip_addr,ip_port))

# 接收資料
def recv_mes(udp_socket):
	recvdata = udp_socket.recvfrom(1024)
	# 列印出來
	print("來自%s的消息:%s"% (str(recvdata[1]),recvdata[0].decode("utf-8")))

def main():
	# 建立套接字
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
	# 本地端口固定
	udp_socket.bind(("",8080))

	
	while True:
		print("----------udp聊天器-----------")
		print("1:發送消息")
		print("2:接收消息")
		print("3:退出系統")

		op = input("請輸入功能:")
		if op == "1":
			send_mes(udp_socket)
		elif op == "2":
			recv_mes(udp_socket)
		elif op =="3":
			break
		else:
			print("輸入有誤,請重新輸入!")
	
	# 關閉套接字
	udp_socket.close()

if __name__ == '__main__':
	main()
           

小輝的電腦:

import socket

# 發送消息
def send_mes(udp_socket):
	# 目标端口
	ip_addr = input("請輸入目的ip:")
	ip_port = int(input("請輸入目的端口:")) # 端口要求為數字
	msg_data = input("請輸入内容:")
	udp_socket.sendto(msg_data.encode("utf-8"),(ip_addr,ip_port))

def recv_mes(udp_socket):
	# 接收資料
	recvdata = udp_socket.recvfrom(1024)
	# 列印出來
	print("來自%s的消息:%s"% (str(recvdata[1]),recvdata[0].decode("utf-8")))

def main():
	# 建立套接字
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
	# 本地端口固定
	udp_socket.bind(("",8081))

	
	while True:
		print("----------udp聊天器-----------")
		print("1:發送消息")
		print("2:接收消息")
		print("3:退出系統")

		op = input("請輸入功能:")
		if op == "1":
			send_mes(udp_socket)
		elif op == "2":
			recv_mes(udp_socket)
		elif op =="3":
			break
		else:
			print("輸入有誤,請重新輸入!")
	
	# 關閉套接字
	udp_socket.close()

if __name__ == '__main__':
	main()
           
Windows效果圖
用python寫一個簡單的udp套接字聊天器
用python寫一個簡單的udp套接字聊天器

繼續閱讀