1. 파이썬 UDP 통신
서버가 먼저 실행됩니다
import socket
import time
def recv_msg(udp_socker):
recv_data = udp_socker.recvfrom(1024) #接收最大1024字节大小的数据
print("%s:%s" % (str(recv_data[1]), recv_data[0].decode("utf-8"))) #接收的数据是数组,第一个是ip:端口,第二个值才是数据
if __name__ == "__main__":
udp_socket2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket2.bind(("", 7789))
# 接收并显示
while True:
recv_msg(udp_socket2)
time.sleep(1)
클라이언트가 데이터를 보냅니다.
import socket
def send_msg(udp_socket):
#发送信息
dest_ip = "127.0.0.1" #没有服务器,就本机做服务器
dest_port = 7789
send_data = "111he11lloworld"
udp_socket.sendto(send_data.encode("utf-8"),(dest_ip,dest_port))
def main():
# 创建套接字
udp_socket1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定信息
udp_socket1.bind(("", 7788))
# 发送
send_msg(udp_socket1)
if __name__ == "__main__":
main()
2. 파이썬 TCP 통신
섬기는 사람
import socket
def main():
tcp_server_socker = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_server_socker.bind(("",7789))
#服务器拒绝(超过限制数量的)连接之前,操作系统可以挂起的最大连接数量,即最大连接数
tcp_server_socker.listen(128)
#连接监听,这是个阻塞函数
new_client_socket, client_addr = tcp_server_socker.accept()
print(client_addr)
#接收数据,缓存池1024字节大小
recv_data = new_client_socket.recv(1024)
print(recv_data)
print("接收数据"+str(recv_data,encoding="utf-8"))
#回送数据
new_client_socket.send("success receive".encode())
#后置动作,关闭套接字
new_client_socket.close()
tcp_server_socker.close()
if __name__ == "__main__":
while True:
main()
고객
import socket
import json
import time
import datetime
def main():
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_addr = ("127.0.0.1",7789)
tcp_client_socket.connect(server_addr)
#发送数据
print("ready to sending")
date = (datetime.datetime.now()).strftime("%Y-%m-%d %H:%M:%S")
data = f'<46>USM |1|{date}|1|1|dfs1|10.5.68.136|登录系统: 密码登录||\n'
tcp_client_socket.send(data.encode("utf-8"))
print("success to send---")
recv_data = tcp_client_socket.recv(1024)
print("recv:"+str(recv_data,encoding="utf-8"))
#释放socket
tcp_client_socket.close()
if __name__ == "__main__":
main()
여기에 전송되는 데이터는 syslog 형식으로 표준 데이터는 끝에 \n(darkpit)을 붙여야 하며 데모를 원하시면 추가하지 않으셔도 됩니다.