I'd like to send data between a client and a server with two raspberry pi 3 being that the client executing the get command will return the server's temperature value from the BMP180 sensor to the client. However, with the code I build when I run the get command, the server goes down and I have to rerun the .py file with the server name. I know I'm fooling myself somewhere on the programming just do not see where.
My code is as follows:
Client:
import socket
import time
host = '10 .6.4.198 '# Server IP Address
port = 4840 # Port of communication, must be above 1024
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM, 0) # s = socket.socket (addr_family, type)
#################### GRADES ############################# ##############################
#### TCP #####
# Communication in IPV4 protocol with TCP flow-based connection
# Computers establish a connection to each other and read / write data
# in a continuous stream of bytes --- as a file, most common case.
#### UDP ####
# If we had AF_INET6 would be communication with IPV6 protocol
# Had we SOCK_DGRAM we had communication based on UDP datagrams
#Computers send discrete packets (or messages) to each other.
# Each packet contains a collection of bytes, but each packet is separate and independent.
################################################## ####################################
s.connect ((host, port))
print ("<======== Connected to Server =========> \ n")
while True:
command = input ("Enter your command:")
if command == 'quit':
print ("Disconnected of Server")
#Send EXIT request to other end
s.send (str.encode (command))
break
elif command == 'kill':
print ("Server shutdown")
#Send KILL command
s.send (str.encode (command))
break
s.send (str.encode (command))
reply = s.recv (1024)
print (reply.decode ('utf-8'))
s.close ()
Server:
import socket
import Adafruit_BMP.BMP085 as BMP085
host = '10 .6.4.198 '# Specifies the IP address of our Server
port = 4840 # Port through which to go to carry out the communication, replace 12345 by the port that we want above 1024
sensor = BMP085
# Function setting of our server so we can call it def setupServer ():
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM, 0)
# s = socket (domain, type, protocol)
# AF_INET specifies that the desired domain is the Internet domain
# SOCK_STREAM is the type you want and supported by the AF_INET domain
print ("Socket Created.")
# Print statement of socket not working
try:
s.bind ((host, port)) # binds our host and port
except socket.error as msg:
print (msg)
print ("Socket bind complete.")
print ("Waiting for data ......")
returns
# Function setting of our server connection def setupConnection ():
s.listen (10) # Allows one connection at a time. You can change the value for the desired connections at the same time.
conn, address = s.accept () #Configuration of connection and address and accepting whatever is listening
print ("Connected to:" + address [0] + ":" + str (address [1])) # Str (Address [1]) converts the ip address to string
## print ("Connected to:" + address [1] + ":" + str (address [2]))
return conn # returns connection value
def GET (): # retrieves this stored value that was previously specified
reply = sensor # variable data storage
return reply
def REPEAT (dataMessage): # repeats the message entered in the command
reply = dataMessage [1]
return reply
def dataTransfer (conn):
#A big loop that sendsreceives data until told not to.
while True:
#Receive the data
data = conn.recv (1024) # receive the data
data = data.decode ('utf-8') # decoding data received in utf-8
#Split the data such that you separate the command from the rest of the data.
dataMessage = data.split ('', 1)
command = dataMessage [0]
if command == 'get':
reply = GET ()
print ("Temperature = {0: 0.2f * C" .format (sensor.read_temperature ()))
elif command == 'repeat':
reply = REPEAT (dataMessage)
elif command == 'quit':
print ("Our client has left us :(")
break
elif command == 'kill':
print ("Our server is shutting down.")
s.close ()
break
else:
reply = 'Unknow Command'
conn.sendall (str.encode (reply))
print ("Data has been sent !!!!")
conn.close ()
s = setupServer () # calls the setupServer
while True:
try:
conn = setupConnection () # get the connection from the setupServer function
dataTransfer (conn)
except:
break