InSim examples
From LFS Manual
Python
Example #1
How to connect, send a packet and receive the response.
# Import Python's socket module. import socket # Import Python's struct module, which allows us to pack and unpack strings. import struct # Initialise the socket in TCP mode. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Connect to LFS. sock.connect(('localhost', 29999)) # Pack the IS_ISI data into a string. isi = struct.pack('BBBBHHBcH16s16s', 44, # Size 1, # Type 0, # ReqI 0, # Zero 0, # UDPPort 0, # Flags 0, # Sp0 ' ', # Prefix 0, # Interval 'password', # Admin 'MyProgram',) # IName # Send the string to InSim sock.send(isi) # Some constants. ISP_TINY = 3 TINY_NONE = 0 # keep alive the connection (see below) def keepAlive(packet): # Check the packet type. if ord(packet[1]) == ISP_TINY: # Unpack the packet data. tiny = struct.unpack('BBBB', packet) # Check the SubT. if tiny[3] == TINY_NONE: # Send the keep alive packet back to LFS. sock.send(packet) # We use a string as the buffer. buffer = '' while True: # Receive up to 1024 bytes of data. data = sock.recv(1024) # If no data is received the connection has closed. if data: # Append received data onto the buffer. buffer += data # Loop through each completed packet in the buffer. The first byte of # each packet is the packet size, so check that the length of the # buffer is at least the size of the first packet. while len(buffer) > 0 and len(buffer) >= ord(buffer[0]): # Copy the packet from the buffer. packet = buffer[:ord(buffer[0])] # Remove the packet from the buffer. buffer = buffer[ord(buffer[0]):] # check keep alive! keepAlive(packet) # The packet is now complete! :) # doSomethingWithPacket(packet) else: break # Release the socket. sock.close()