【问题标题】:<class 'socket.error'>([Errno 111] Connection refused)<class 'socket.error'>([Errno 111] 连接被拒绝)
【发布时间】:2015-08-13 10:19:06
【问题描述】:

我正在使用 python 开发一个家庭自动化应用程序,但是自从将它从我的本地设置迁移到两台物理机器(服务器、客户端)后,我收到了一个连接被拒绝的错误:

Traceback(最近一次调用最后一次):文件 “/opt/web-apps/web2py/gluon/restricted.py”,第 227 行,受限 在环境文件中执行 ccode "/opt/web-apps/web2py/applications/Home_Plugs/controllers/default.py", 第 85 行,在文件“/opt/web-apps/web2py/gluon/globals.py”中, 第 393 行,在 self._caller = lambda f: f() 文件中 “/opt/web-apps/web2py/gluon/tools.py”,第 3440 行,在 f 返回 动作(*a, **b) 文件 "/opt/web-apps/web2py/applications/Home_Plugs/controllers/default.py", 第 32 行,在切换 GPIO.setup(light.OnPin,GPIO.OUTPUT) 文件中 “applications/Home_Plugs/modules/GPIOClient.py”,第 23 行,在设置中 文件“applications/Home_Plugs/modules/GPIOClient.py”,第 18 行,在发送中 主机='192.168.1.79'文件“/usr/lib64/python2.7/socket.py”,第224行,在meth 返回 getattr(self._sock,name)(*args) 错误:[Errno 111] 连接被拒绝

服务器代码

#!/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()

客户端代码

#!/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)

机器: 服务器 - Raspbian Wheezy/Python 2.7 客户端 - CentOS 7/Python 2.7

我已禁用所有防火墙以确保不会阻止连接。 Telnet 工作

我还有一个测试 client.py 脚本,当从客户端命令行运行时它也可以工作:

#!/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)

任何帮助将不胜感激

如果需要更多信息,请告诉我

提前致谢

【问题讨论】:

  • 你确定服务器正在监听 21567 端口吗?
  • 这是我使用 netstat 检查的第一件事,我可以看到服务在端口 21567 上侦听。

标签: python sockets python-2.7 connection gpio


【解决方案1】:

原来我的 GPIOClient.py 中有 2 个不正确的回车

删除,现在一切正常

【讨论】:

    猜你喜欢
    • 2012-07-20
    • 2018-11-07
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多