Sensor2pg/utils/test_socket_send.py

96 lines
3.2 KiB
Python

import socket
import sys
import time
def octal_to_bytes(octal_str):
# Remove prefix '0o' and convert to integer
num = int(octal_str, 8)
# Convert to bytes and return in little-endian order with 2 bytes
return num.to_bytes(2, byteorder='little')
def hex_to_bytes(hex_str):
# Remove prefix '0x' and convert to integer
num = int(hex_str, 16)
# Convert to bytes and return in little-endian order with 4 bytes
return num.to_bytes(4, byteorder='little')
def process_field(field):
if field.startswith('0o'):
return octal_to_bytes(field[2:])
elif field.startswith('0x'):
return hex_to_bytes(field[2:])
def send_data(server: str = '', port: int = 8000, send_freq: int = 0):
# Create a socket object
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.settimeout(10)
# Set the server's IP address and port number
server_address = (server, port)
# Connect to the server
client_socket.connect(server_address)
# The data to be sent must be in bytes format
fields = ['0o24', '0o0', '0x4a', '0x24a', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0',
'0x0', '0xd3', '0x106', '0xbd', '0xfd', '0x2e', '0x51', '0x54', '0x0', '0x0', '0x0']
data_bytes = b"XIJIUSS\0" + b''.join(process_field(field) for field in fields)
print(data_bytes)
print(len(data_bytes))
if send_freq > 0:
print(f'Sending data to server at interval of %d second(s)...' % send_freq)
while (True):
try:
# Send an additional data
client_socket.sendall(data_bytes)
print('Data sent successfully!')
except socket.timeout:
print("Send timeout 10sec.")
continue
try:
# Receive data from the server, assuming a fixed length of 10 bytes
received_data = client_socket.recv(len("OK"))
if received_data:
print(f"Received from server: {received_data}")
else:
print("No data received!")
except socket.timeout:
print("Receive timeout 10sec.")
continue
time.sleep(send_freq)
elif send_freq == 0:
print('Sending data once to server...')
# Encode the data as bytes and send it to the server
client_socket.sendall(data_bytes)
print('Data sent successfully!')
# Receive data from the server, assuming a fixed length of 10 bytes
received_data = client_socket.recv(len("OK"))
if received_data:
print(f"Received from server: {received_data}")
else:
print("No data received!")
else:
print("Invalid send frequency value!")
# Close the socket connection
client_socket.close()
if __name__ == "__main__":
if len(sys.argv) == 4:
send_data(server=sys.argv[1], port=int(sys.argv[2]), send_freq=int(sys.argv[3]))
elif len(sys.argv) == 3:
send_data(server=sys.argv[1], port=int(sys.argv[2]))
elif len(sys.argv) == 2:
send_data(server=sys.argv[1])
send_data()
else:
print("Usage: python test_socket_send.py <server_ip> [port] [send_freq(sec)]")
sys.exit(1)