Transfer of temperature data through the socket module

0

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
    
asked by anonymous 30.07.2018 / 13:19

0 answers