客户端和服务器需要在同一网段
聊天客户端
# coding=utf-8
from socket import *
from threading import Thread
import time
udp_socket = socket(AF_INET, SOCK_DGRAM)
def send_message(my_name, send_addr):
print("输入消息,按回车键发送 ,发送‘quit’,可退出聊天室")
send_data = "------系统消息:%s加入了聊天室------" % my_name
udp_socket.sendto(send_data.encode("utf-8"), send_addr)
while True:
send_data = my_name + ': ' + input()
if send_data == my_name + ': ' + 'quit':
break
if send_data == my_name + ': ':
continue
udp_socket.sendto(send_data.encode("utf-8"), send_addr)
send_data = "------系统消息:%s退出了聊天室------" % my_name
udp_socket.sendto(send_data.encode("utf-8"), send_addr)
time.sleep(1)
exit(0)
def get_message(send_addr):
udp_socket.connect_ex(send_addr)
while True:
rec_mesg = udp_socket.recvfrom(1024)
rec_data, ip = rec_mesg
print(rec_data.decode("utf-8"))
def main():
print("欢迎进入聊天客户端系统")
ip = input("请输入服务器的ip地址:")
port = eval(input("请输入端口:"))
send_addr = (ip, port)
my_name = input("请输入你的名字:")
p1 = Thread(target=send_message, args=(my_name, send_addr))
p2 = Thread(target=get_message, args=(send_addr,))
p1.start()
p2.start()
if __name__ == '__main__':
main()
聊天服务器
# coding=utf-8
from socket import *
print("欢迎进入聊天服务器系统")
port = int(input("请输入此服务器要绑定的端口:"))
lis = []
udp_socket = socket(AF_INET, SOCK_DGRAM)
udp_socket.bind(('', port))
while True:
rec_data,ip = udp_socket.recvfrom(1024)
if ip not in lis:
lis.append(ip)
print(rec_data.decode("utf-8"))
for i in lis:
udp_socket.sendto(rec_data, i)