Talking Raspberries, TCP socket protocol in Phyton

Making Raspberry Pi talk to each other in Python

Majority of my communication is handled via AutoRemote. It links my pc, mobile, tablet and Raspberry PI 2 & 3. It’s all good and dandy most of the times, until I try to issue a python command to the other RPI. Turns out Raspberry PI TCP socket protocol in python can candle client-host communication well. Socket in python is one of the low-level protocols allowing passing over simple commands between 2 devices over the internet. Communication is very fast, and script handling it is very lightweight.

Raspberry Pi TCP Socket protocol

Before we can use socket with python, we need to install this library on both devices (client and host) to do so simply run this in terminal:

sudo apt-get install socket

After prompt installation you will be able to use socket libraries within your python scripts. Below you can see the sample code that you can use in your creation. More details on the structure of the code in the video.
As you can see from the example below, nothing stops you from writing a simple chat protocol between both devices. Surely it won’t be a Whatsapp competitor, but it is something to explore for sure. Few things to remember:

  • Host connection has to be open, otherwise client will throw an exception
  • Port is linked to specific client and connection, you wont be able to share the connection with other devices
  • If one of the sides terminates, connection is lost and new Host session needs to be started

If you can live with these limitations, Raspberry Pi TCP socket provides you with lightning fast responsiveness. How would you use Raspberry Pi socket protocol?

PYTHON: Client
import socket

HOST = '' # Enter IP or Hostname of your server
PORT = 12345 # Pick an open Port (1000+ recommended), must match the server port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))

#Lets loop awaiting for your input
while True:
	command = raw_input('Enter your command: ')
	s.send(command)
	reply = s.recv(1024)
		if reply == 'Terminate':
			break
		print reply
PYTHON: Server
import socket

HOST = '' # Server IP or Hostname
PORT = 12345 # Pick an open Port (1000+ recommended), must match the client sport
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'

#managing error exception
try:
	s.bind((HOST, PORT))
	except socket.error:
	print 'Bind failed '

	s.listen(5)
	print 'Socket awaiting messages'
	(conn, addr) = s.accept()
	print 'Connected'

# awaiting for message
while True:
	data = conn.recv(1024)
	print 'I sent a message back in response to: ' + data
	reply = ''

	# process your message
	if data == 'Hello':
		reply = 'Hi, back!'
		elif data == 'This is important':
		reply = 'OK, I have done the important thing you have asked me!'

	#and so on and on until...
	elif data == 'quit':
		conn.send('Terminating')
		break
	else:
		reply = 'Unknown command'

	# Sending reply
	conn.send(reply)
	conn.close() # Close connections

SHARE