插座接收1

时间:2016-06-18 23:08:48

标签: python sockets raspberry-pi

我正在尝试在python中创建套接字连接。我需要监听服务器,直到它发送消息,因此我需要使用while True。 客户端:

import RPi.GPIO as GPIO
import time
import socket

GPIO.setmode(GPIO.BOARD)

pinLDR = 7
pinLED = 11
touch = False
sock = socket.socket()
sock.connect(('192.168.1.67', 9092))

while True:
    print sock.recv(256)

def rc_time ():
    count = 0

    GPIO.setup(pinLDR, GPIO.OUT)
    GPIO.output(pinLDR, GPIO.LOW)
    time.sleep(0.1)

    GPIO.setup(pinLDR, GPIO.IN)

    while (GPIO.input(pinLDR) == GPIO.LOW):
    count += 1

    return count

def led(lh):
    GPIO.setup(pinLED, GPIO.OUT)
    if lh == 1:
        GPIO.output(pinLED, GPIO.HIGH)
    else:
        GPIO.output(pinLED, GPIO.LOW)

try:
    while True:
        print(str(rc_time()))
        if rc_time() > 5000:
            if touch == False:
                print "triggered"
                sock.send("triggered")
                touch = True
        else:
            if touch == True:
                sock.send("nottriggered")
                print "nottriggered"
                touch = False
except KeyboardInterrupt:
    pass
finally:
    GPIO.cleanup()
sock.close()

但我有问题。即使服务器发送消息,也不会打印任何内容。首先while True之后的整个代码不起作用

1 个答案:

答案 0 :(得分:1)

更新:问题中代码的问题在于它在顶部有一个无限循环。下面的代码都不会执行:

while True:
    print sock.recv(256)

(显然这个特定的服务器在收到消息之前不会发送消息,所以它永远不会发送任何消息。)

这是一个简单的工作示例。如果这没有帮助,您需要在问题中提供更多背景信息。

这是客户:

import socket
s = socket.socket()
s.connect(('localhost', 12345))
while True:
    print s.recv(256)

对应的服务器代码:

import socket
import time

s = socket.socket()
s.bind(('', 12345))
s.listen(0)
conn, addr = s.accept()
while True:
    conn.send("Hello")
    time.sleep(10)