使用Python TCP / IP从两个客户端读取数据

时间:2015-02-16 03:42:12

标签: python sockets

我想读取1台服务器读取的2个客户端的数据。在我的程序中,当我在服务器和客户端运行所有程序时,只能从1个客户端读取数据。你能帮助我吗?我在互联网上搜索找到任何可以帮助我的方法。抱歉我的英语不好。

#server code
import socket

HOST = ''
PORT = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.blind((HOST,PORT))
s.listen(1)
conn, addr = s.accept()
while 1:
    data=conn.recv(1)
    print data
conn.close()

#client1 code 
import socket
import RPi.GPIO as GPIO

HOST = '192.168.43.57'
PORT = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.IN,pull_up_down=GPIO.PUD_UP)
while 1:
    if GPIO.input(4) == TRUE:
        s.sendall('1')
    if GPIO.input(4) == FALSE:
        s.sendall('0')
conn.close()

#client2 code 
import socket
import RPi.GPIO as GPIO

HOST = '192.168.43.57'
PORT = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.IN,pull_up_down=GPIO.PUD_UP)
while 1:
    if GPIO.input(4) == TRUE:
        s.sendall('2')
    if GPIO.input(4) == FALSE:
        s.sendall('3')
conn.close()

感谢您的关注和帮助

1 个答案:

答案 0 :(得分:0)

没有完全得到你的阙,希望你的意思是为多个客户服务。 从您的服务器代码,它只从1客户端获得连接,然后退出。 如果你想永远服务,一次服务1个客户,你需要像

这样的东西
while True:
print >>sys.stderr, 'waiting for a connection'
connection, client_address = sock.accept()
try:
    print >>sys.stderr, 'client connected:', client_address
    while True:
        data = connection.recv(16)
        print >>sys.stderr, 'received "%s"' % data
        if data:
            # Whatever server wants to do with data.
        else:
            break
finally:
    connection.close()

为了克服限制(一次一个客户),有几种策略。其中之一涉及使服务器多线程。为每个接受的连接创建线程,以及实际处理数据的处理程序。

你也有一些法术错误:

)blind =>结合

)客户端通过变量“s”连接,但您正在关闭conn。