96 lines
3.2 KiB
Python
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)
|