UDP聊天器 服务器版 支持离线消息 支持净网过滤

#服务器端

#==========================================================

#导入模块import socketimport threadingimport re#设置全局变量flagflag = 0#设置离线消息列表msg_list = []#创建udp套接字udp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)#绑定ip端口udp_server_socket.bind(("", 5858))while True:    # 接收来自双方的消息    msg, ip_port = udp_server_socket.recvfrom(1024)    # 解析双方的ip和端口    print("消息来自:", ip_port[0], "端口:", ip_port[1])    #判断是否已给ip_port1赋值    if flag == 0:        ip_port1 = ip_port        flag = 1    else:        #如果已经赋值,则判断本次获得的ip和端口是否和ip_port1相同,不同则赋值给ip_port2        if ip_port != ip_port1:                ip_port2 = ip_port                for msg_data in msg_list:                    print(msg_data)                    udp_server_socket.sendto(msg_data, ip_port2)                break        else:            udp_server_socket.sendto("对方不在线,本次消息将转为离线消息!".encode(‘gbk‘), ip_port)            msg_list.append(msg)            print(msg_list)

#循环接收while True:    #接收消息    msg, ip_port = udp_server_socket.recvfrom(1024)    # 获取消息来源的ip和端口    print("消息来自:", ip_port[0], "端口:", ip_port[1])    #判断消息内容,不符合法规进行过滤    msg1 = re.sub("坏","好",msg.decode(‘gbk‘))    msg = msg1.encode(‘gbk‘)    # 给双方回复消息    if ip_port == ip_port1:            udp_server_socket.sendto(msg, ip_port2)    if ip_port == ip_port2:            udp_server_socket.sendto(msg, ip_port1)

#客户端

#==========================================================

"""UDP聊天器多任务版(两个子线程)"""#导入多线程及套接字模块import socketimport threadingimport sys

#创建客户端类class UdpClient(object):    #创建init方法,初始化变量    def __init__(self):        # 创建udp套接字        self.udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)        self.params = int(sys.argv[1])    #创建接收方法    def recv_msg(self,current_socket):        #循环接收消息并显示        while True:            #接收数据            recv_data,ip_port = current_socket.recvfrom(1024)            #转码            recv_message = recv_data.decode(‘gbk‘)            #输出            print("\n\t\t\t",recv_message,"\n")

#创建发送方法    def send_msg(self,current_socket):        # 循环发送用户输入的消息        while True:            # 获取用户输入的内容            send_msg = input("输入的消息") + "\n"            # 转码            send_data = send_msg.encode(‘gbk‘)            # 发送二进制数据            current_socket.sendto(send_data, ("127.0.0.1", self.params))

def run(self):        # 向服务器发送hello包,让服务器找到我        self.udp_socket.sendto("".encode(‘gbk‘), ("127.0.0.1", 5858))        # 创建接收消息的子线程        recv_thread = threading.Thread(target=self.recv_msg, args=(self.udp_socket,))        send_thread = threading.Thread(target=self.send_msg, args=(self.udp_socket,))        # 启动接收消息子线程        recv_thread.start()        send_thread.start()        send_thread.join()        recv_thread.join()        # 关闭套接字        self.udp_socket.close()clientA = UdpClient()clientA.run()

原文地址:https://www.cnblogs.com/sunmingduo/p/10219127.html

时间: 2024-10-11 17:54:04

UDP聊天器 服务器版 支持离线消息 支持净网过滤的相关文章

xmpp和OpenFire示例,即时聊天室,支持离线消息

让我说说为什么写这个博客,这是因为我在上周末的研究XMPP和OpenFire,从互联网上下载Demo,但跑不起来.它花了很长的时间.它被改造.抬高.篇博文也是希望后边学习XMPP和OpenFire的同学下载后直接执行.少走弯路了.时间就是金钱,不要花费不必要的时间,也希望大家都能有分享精神.,有问题能够发邮件给我([email protected]) 关于xmpp和openfire的资料请百度百科一下 下面展示一个聊天程序.所谓万事都要有Helloworld嘛,这个demo能够做为学习xmpp和

socket网络编程之udp聊天器

1 from socket import * 2 3 def send_msg(udp_socket): 4 '''发送消息''' 5 # 获取要发送的内容 6 dest_ip = input("请输入对方IP:") 7 dest_port = int(input("请输入对方port:")) 8 send_data = input("请输入要发送的消息:") 9 udp_socket.sendto(send_data.encode('utf-8

案例:多任务版udp聊天器

说明 编写一个有2个线程的程序 线程1用来接收数据然后显示 线程2用来检测键盘数据然后通过udp发送数据 要求 实现上述要求 总结多任务程序的特点 参考代码: import socket import threading def send_msg(udp_socket): """获取键盘数据,并将其发送给对方""" while True: # 1. 从键盘输入数据 msg = input("\n请输入要发送的数据:") # 2

udp聊天器

import socket def send_msg(udp_socket): """获取键盘数据,并将其发送给对方""" # 1. 从键盘输入数据 msg = input("\n请输入要发送的数据:") # 2. 输入对方的ip地址 dest_ip = input("\n请输入对方的ip地址:") # 3. 输入对方的port dest_port = int(input("\n请输入对方的por

多线程的UDP聊天器

# pcjimport socketimport threading# def recv_msg(udp_socket):# while True:# recv_date = udp_socket.recvfrom(1024)# print(recv_date[0].decode("gbk"),recv_date[1])## def send_msg(udp_socket,dest_ip,dest_port):# while True:# send_date = input("

python使用udp实现聊天器

聊天器简易版 使用udp实现一个简单的聊天器程序,要求如下: 在一个电脑中编写1个程序,有2个功能 1.获取键盘数据,并将其发送给对方 2.接收数据并显示 并且功能数据进行选择以上的2个功能调用 例子程序如下: import socket def send_message(udp_socket): # 输入对方的ip/port dest_ip = input("请输入对方的ip:") dest_port = int(input("请输入对象的port:")) # 读

试图使用未在此报表服务器中注册或此版 Reporting Services 不支持的数据扩展插件“Devart.Data.PostgreSql”

数据源用的是Postgresql 我在Deploy Report的时候出现这条ErrorMessage Error 2 试图使用未在此报表服务器中注册或此版 Reporting Services 不支持的数据扩展插件“Devart.Data.PostgreSql”. 解决方案: SQL Server安装路径\MSRS10_50.***\Reporting Services\ReportServer\rsreportserver.config里面加下面这个节点然后重启Sql server就好了<E

ejabberd聊天室离线消息

首先,xmpp服务器是基于ejabberd.离线消息模块是mod_interact,原地址地址:https://github.com /adamvduke/mod_interact: 修改后实现群聊离线消息:https://github.com/Joywok/mod_interact 不仅仅要修改这一个文件,还涉及到ehabberd_sm.mod_muc_room.mod_offline三个模块的修改. 以上三个文件仅仅只需要屏蔽或者修改几行代码就能实现了,很简单的. ehabberd_sm屏蔽

python—多任务版udp聊天机器人

将多任务(多线程)引入到udp聊天机器人,可以实现同时发送消息和接收消息 1 import socket 2 import threading 3 4 5 def udp_send(udp_socket,ip,port): 6 while True: 7 try: 8 # 获取发送的信息 9 data = input('请输入要发送的信息:') 10 udp_socket.sendto(data.encode('gbk'), (ip,port)) 11 12 except Exception a