Python套接字TCP服务器和客户端

时间:2020-11-05 11:41:08

标签: python opencv

我想获取用户按下的键盘数据并将其发送到服务器。我的服务器用于实时摄像头,但是在客户端,我无法使用while循环使用Listener。当我运行时客户端中的程序,摄像头正在运行,但是键盘监听器不起作用。我如何一起使用它们?

#client
import socket
import cv2
import numpy as np
from pynput.keyboard import Listener
PI_IP = "192.168.1.33"
streamPort = 8080

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((PI_IP, streamPort))

client_socket.settimeout(5)
client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True)

rfile = client_socket.makefile('rb')
stream_bytes = b' '





def sendSocket(key):
    keyData = str(key)
    print("Pressed: " + keyData)
    client_socket.send(keyData.encode()) 
    print("pressed:",keyData)
    data = client_socket.recv(1024).decode()
    print('Received from server: ' + data)



 




while True:
    stream_bytes += rfile.read(1024)

    if len(stream_bytes) == 0:
        break

    first = stream_bytes.find(b'\xff\xd8')
    last = stream_bytes.find(b'\xff\xd9')

    if first != -1 and last != -1:

        jpg = stream_bytes[first:last + 2]
        stream_bytes = stream_bytes[last + 2:]

        image = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
        cv2.imshow('image', image)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

cv2.destroyAllWindows()
rfile.close()
client_socket.close()
with Listener(on_press=sendSocket) as l:
     l.join()






 #server
 import io, struct
 import picamera
 import socket
streamPort = 8080



           

with picamera.PiCamera() as camera:

   stream = io.BytesIO()
   server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
   server_socket.bind(("192.168.1.33",streamPort))
   server_socket.listen(2)


           


while True:
    
    
    
    
    client_conn, client_address = server_socket.accept()
    connection = client_conn.makefile('wb')
    
    
    
    
    
    
    
    
    for _ in camera.capture_continuous(stream, "jpeg", use_video_port = True):
        
        try:
            
             
            connection.write(struct.pack('<L', stream.tell()))
            connection.flush()
            stream.seek(0)
            connection.write(stream.read())
            stream.seek(0)
            stream.truncate()
       
        except:
            break
    data = client_conn.recv(1024).decode()
    print("from connected user: " + str(data))
    conn.send(data.encode())
    connection.close()
    server_socket.close() 

   
    

0 个答案:

没有答案