首页 > 编程语言 >python3使用socket模块实现简易syslog服务器

python3使用socket模块实现简易syslog服务器

时间:2024-01-21 19:46:43浏览次数:34  
标签:retries socket 端口 syslog 服务器 port python3

废话不多说直接上代码

 1 import socket
 2 import time
 3 
 4 
 5 def socket_bind(server_socket, host, port=514, max_retries=5):
 6     retries = 0
 7     while retries < max_retries:
 8         try:
 9             server_socket.bind((host, port))
10             print(f"syslog服务器已启动,监听端口{port}")
11             break  # 如果绑定成功,跳出循环
12         except OSError:
13             port = input(f"当前端口 {port} 可能被占用,请重新输入一个端口(500-65500):")
14             while True:
15                 if not port.isdigit():
16                     port = input("输入无效,不是一个有效的整数,请重新输入:")
17                     continue
18                 port = int(port)
19                 if not 500 <= port <= 65500:
20                     port = input("输入无效,数字不在范围内,请重新输入:")
21                     continue
22                 break
23             retries += 1
24     else:
25         print("绑定端口失败,即将退出...")
26         time.sleep(3)
27         exit()
28 
29 
30 def udp_server(host, port):
31     # 创建UDP套接字
32     with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as server_socket:
33         # 将套接字绑定到指定的地址和端口
34         socket_bind(server_socket, host, port)
35         with open("syslog.log", mode="w", encoding="utf-8") as s:
36             while True:
37                 # 接收数据
38                 data, client_address = server_socket.recvfrom(10000)
39                 print(f"接收到来自 {client_address} 的日志: {data.decode('utf-8')}", flush=True)
40                 s.write(f"接收到来自 {client_address} 的日志: {data.decode('utf-8')}")
41                 s.flush()
42 
43 
44 if __name__ == "__main__":
45     # 设置服务器的主机和端口
46     server_host = "0.0.0.0"  # 监听所有网络接口
47     server_port = 514
48 
49     # 启动UDP服务器
50     udp_server(server_host, server_port)

 

标签:retries,socket,端口,syslog,服务器,port,python3
From: https://www.cnblogs.com/xfyydhz/p/17978217

相关文章

  • WebSocket|概念、原理、用法及实践
    WebSocket|概念、原理、用法及实践 转载自:https://juejin.cn/post/7086021621542027271一、WHY:为什么需要WebSocket?在WebSocket出现之前,如果我们想实现实时通信,比较常采用的方式是Ajax轮询,即在特定时间间隔(比如每秒)由浏览器发出请求,服务器返回最新的数据。这样子......
  • 万字长文,一篇吃透WebSocket:概念、原理、易错常识、动手实践
     万字长文,一篇吃透WebSocket:概念、原理、易错常识、动手实践转载自:https://cloud.tencent.com/developer/article/1887095原作者原文:http://www.52im.net/thread-3713-1-1.html 文章被收录于专栏:即时通讯技术即时通讯技术本文由作者“阿宝哥”......
  • Socket接收粘包处理
    什么是粘包?比如:通过Socket发2条不一样长度的数据,"abc"和"defg"。因为Socket的数据不是你请求发就立即发送的,有时候为了减少网络交互次数,会把几小的个数据凑一凑一起发送。如果前面的被凑到一起发送了"abcdefg",就出现了粘包。 如何解决粘包问题?发送数据的时候,在数据里带上这......
  • Java21 + SpringBoot3集成WebSocket
    目录前言相关技术简介什么是WebSocketWebSocket的原理WebSocket与HTTP协议的关系WebSocket优点WebSocket应用场景实现方式添加maven依赖添加WebSocket配置类,定义ServerEndpointExporterBean定义WebSocketEndpoint前端创建WebSocket对象总结前言近日心血来潮想做一个开源项目,目......
  • Android连接socket
    本文章主要是写Android作为客户端。Android客户端对于Android客户端,我们需要创建一个Socket对象,并指定服务器的IP地址和端口号。然后,使用Socket对象的connect()方法连接到服务器。连接成功后,可以使用Socket对象发送和接收数据。但其中一个比较重要的点是要使用到多线程,因为Andr......
  • hyperexpress框架/使用uwebsockets.js核心
    import{scheduleJob}from'node-schedule';//定时任务functionsetupScheduledTasks(){//每6秒执行一次setInterval(()=>{taskEverySixSeconds();},6000);//每33分钟执行一次setInterval(()=>{taskEve......
  • I/O多路复用与socket
    前言简单来讲I/O多路复用就是用一个进程来监听多个文件描述符(fd),我们将监听的fd通过系统调用注册到内核中,如果有一个或多个fd可读或可写,内核会通知应用程序来对这些fd做读写操作,select、poll、epoll都是用于处理此类问题的系统API,只不过注册和调用的方式略有不同。例如telnet命......
  • uWebSockets.js 框架经验
    目录结构project/│├──src/│├──app.ts│├──routes/││├──userRoutes.ts││└──index.ts│├──entities/││└──User.ts│├──utils/││└──parseQuery......
  • qt和java的socket连接
    事先说明qt为客户端(发出请求)java为服务端(处理请求)关于qt的客户端来说我们大体上要完成三个需求,即请求连接,发送,接收请求连接如果想使用qt写socket程序,首先需要在.pro文件中添加QT+=network;(非常非常重要)接收然后我们就可以在代码中使用QT的网络库了,socket涉及到的函数库......
  • C# 中,可以使用 System.Net.Sockets 命名空间中的 UdpClient 类来发送和接收 UDP 数据
    C#中,可以使用System.Net.Sockets命名空间中的UdpClient类来发送和接收UDP数据报文。以下是一个简单的C#示例,演示如何使用UDP发送和接收数据:点击查看代码usingSystem;usingSystem.Net;usingSystem.Net.Sockets;classProgram{staticvoidMain(){......