Stephen Dean
Stephen Dean

Reputation: 31

<class 'socket.error'>([Errno 111] Connection refused)

I'm working on an home automation app using python, but since migration this from my local setup to two physical machines(Server, Client) i am getting a connection refused error:

Traceback (most recent call last): File "/opt/web-apps/web2py/gluon/restricted.py", line 227, in restricted exec ccode in environment File "/opt/web-apps/web2py/applications/Home_Plugs/controllers/default.py", line 85, in File "/opt/web-apps/web2py/gluon/globals.py", line 393, in self._caller = lambda f: f() File "/opt/web-apps/web2py/gluon/tools.py", line 3440, in f return action(*a, **b) File "/opt/web-apps/web2py/applications/Home_Plugs/controllers/default.py", line 32, in toggle GPIO.setup(light.OnPin,GPIO.OUTPUT) File "applications/Home_Plugs/modules/GPIOClient.py", line 23, in setup File "applications/Home_Plugs/modules/GPIOClient.py", line 18, in send host = '192.168.1.79' File "/usr/lib64/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) error: [Errno 111] Connection refused

Server Code:

#!/usr/bin/env python
import socket
import RPi.GPIO as GPIO
import sys
import logging

SETUP = chr(0)
OUTPUT = chr(1)

GPIO.setmode(GPIO.BOARD)

def gpio_setup(data):
    pin,dir = ord(data[0]),ord(data[1])
    GPIO.setup(pin,dir)
    logging.gpioServerLog("setup" + str(pin) + str(dir))
    return 0

def gpio_output(data):
    pin,val = ord(data[0]),ord(data[1])
    GPIO.output(pin,val)
    logging.gpioServerLog("out" + str(pin) + str(val))
    return 0

if __name__=='__main__':
    HOST = ''
    PORT = 21567
    BUFSIZ = 1024
    ADDR = (HOST, PORT)
    serversock = socket.socket()
    serversock.bind(ADDR)
    serversock.listen(5)

    while 1:
        ret = None
        logging.gpioServerLog('waiting for connection...')
        clientsock, addr = serversock.accept()
        logging.gpioServerLog('...connected from:' + str(addr))
        data = clientsock.recv(BUFSIZ)
        if data[0] == SETUP:
            ret = gpio_setup(data[1:])
        elif data[0] == OUTPUT:
            ret = gpio_output(data[1:])

        if  ret:
        clientsock.send('Thank you for conencting')
            clientsock.send(ret)
            clientsock.close()

Client Code:

#!/usr/bin/env python
# coding: utf8

import socket
import struct

SETUP_CMD = chr(0)
OUTPUT_CMD = chr(1)

OUTPUT = chr(0)
INPUT = chr(1)

ON = chr(1)
OFF = chr(0)

def send(data):
     sock = socket.socket()
     host = '192.168.1.79'
     port = 21567
     sock.connect((host,port))
     sock.send(data)
     sock.close

def setup(pin,dir):
    data = struct.pack("ccc",SETUP_CMD,chr(pin),dir)
    send(data)

def output(pin,val):
    data = struct.pack("ccc",OUTPUT_CMD,chr(pin),val)
    send(data)

Machines: Server - Raspbian Wheezy/Python 2.7 Client - CentOS 7/Python 2.7

I have disabled all firewalls to ensure no blocking of connections. Telnet works

i also have a test client.py script whihc also works when ran from client commandline:

#!/usr/bin/python
# This is client.py file

import socket               # Import socket module
import GPIOClient as GPIO
import time

GPIO.setup(11,GPIO.OUTPUT)
GPIO.output(11,GPIO.ON)
time.sleep(1)
GPIO.setup(11,GPIO.INPUT)

Any help would be much appreciated

Any more information require please let me know

Thanks in Advance

Upvotes: 3

Views: 2364

Answers (1)

Stephen Dean
Stephen Dean

Reputation: 31

Turns out there was 2 incorrect carriage returns in my GPIOClient.py

Remove and now all is working

Upvotes: 0

Related Questions