Python: работа с файлом на двух разных серверах? - PullRequest
0 голосов
/ 31 января 2020

Я просто хочу работать с двумя разными серверами над файлом python.

Я могу работать с сервером. Но когда я хочу попробовать работать на двух серверах, я просто не могу.

это клиент

import clss as cl
import cv2
import pickle
import struct

import socket
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput


UDP_IP = "192.168.1.100"
UDP_PORT = 6666



anaDuzen = BoxLayout(orientation = "vertical") # Elemanların hepsini tutan ana pencere düzenimiz
ikinci_Duzen = BoxLayout(orientation = "vertical")

ilkSatir = BoxLayout()
ikinciSatir = BoxLayout()
ucuncuSatir = BoxLayout()
dorduncuSatir = BoxLayout()




ip_txt=TextInput()
textdeneme=TextInput()
take_port_number=TextInput()
label_for_ip=Label(text='IP Adresi:')
label_for_port=Label(text='Port Numarası:')
doldurLabel2=Label()
doldurLabel=Label()

ileri_Button=Button(text = "İleri")
geri_Button=Button(text = "Geri")
sag_button=Button(text = "Sag")
sol_button=Button(text = "Sol")

def kameraSender():

    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('192.168.1.100', 6666))
    connection = client_socket.makefile('wb')

    cam = cv2.VideoCapture(0)

    cam.set(3, 320);
    cam.set(4, 240);

    img_counter = 0

    encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]

    while True:
        ret, frame = cam.read()
        result, frame = cv2.imencode('.jpg', frame, encode_param)
    #    data = zlib.compress(pickle.dumps(frame, 0))
        data = pickle.dumps(frame, 0)
        size = len(data)


        client_socket.sendall(struct.pack(">L", size) + data)
        img_counter += 1
        if(img_counter>90):
            break

    cam.release()


def ileriGit(instance):
    kameraSender()

def geriGit(instance):
    #print("Hello")
    cl.kamera.kameraAl()

def sagaGit(instance):
    #print("Hello")
    MESSAGE="sag"

    try:
        sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        sock.sendto(str.encode(MESSAGE),(UDP_IP,UDP_PORT))
    except:
        pass

def solaGit(instance):
    #print("Hello")
    MESSAGE="sol"

    try:
        sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        sock.sendto(str.encode(MESSAGE),(UDP_IP,UDP_PORT))
    except:
        pass




ileri_Button.bind(on_press = ileriGit)
geri_Button.bind(on_press = geriGit)
sag_button.bind(on_press = sagaGit)
sol_button.bind(on_press = solaGit)

# Ens on denenen kod burada
#geri_Button.bind(on_press=onur)
class Program(App):

    def build(self):

        #İLK SATIR
        ilkSatir.add_widget(label_for_ip)
        ilkSatir.add_widget(ip_txt)

        #İKİNCİ SATIR
        ikinciSatir.add_widget(label_for_port)
        ikinciSatir.add_widget(take_port_number)

        ucuncuSatir.add_widget(doldurLabel)
        ucuncuSatir.add_widget(ileri_Button)
        ucuncuSatir.add_widget(doldurLabel2)
        dorduncuSatir.add_widget(sol_button)
        dorduncuSatir.add_widget(geri_Button)
        dorduncuSatir.add_widget(sag_button)

        anaDuzen.add_widget(ilkSatir)
        anaDuzen.add_widget(ikinciSatir)
        anaDuzen.add_widget(ucuncuSatir)
        anaDuzen.add_widget(dorduncuSatir)

        return anaDuzen


obj=Program()
obj.run()


def kameraSender():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('192.168.1.100', 6666))
    connection = client_socket.makefile('wb')
    cam = cv2.VideoCapture(0)
    cam.set(3, 320);
    cam.set(4, 240);
    img_counter = 0
    encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
    while True:
        ret, frame = cam.read()
        result, frame = cv2.imencode('.jpg', frame, encode_param)
        data = pickle.dumps(frame, 0)
        size = len(data)
        client_socket.sendall(struct.pack(">L", size) + data)
        img_counter += 1
        if(img_counter>90):
            break
    cam.release()
def ileriGit(instance):
    kameraSender()
def sagaGit(instance):
MESSAGE="sag"
    try:
        sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        sock.sendto(str.encode(MESSAGE),(UDP_IP,UDP_PORT))
    except:
        pass

это сервер

import clss as cl
import socket
from time import sleep
import cv2
import io
import socket
import struct
import time
import pickle
import zlib
import sys
import numpy as np
#cl.kamera.kameraAl()
HOST=''
PORT=6666
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind((HOST, PORT))
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print('Socket created')

s.bind((HOST,PORT))
print('Socket bind complete')
s.listen(10)
print('Socket now listening')

payload_size = struct.calcsize(">L")
while True:
    try:
        conn,addr=s.accept()
        data = b""
        while len(data) < payload_size:
            print("Recv: {}".format(len(data)))
            data += conn.recv(4096)
        packed_msg_size = data[:payload_size]
        data = data[payload_size:]
        msg_size = struct.unpack(">L", packed_msg_size)[0]
        while len(data) < msg_size:
            data += conn.recv(4096)
        frame_data = data[:msg_size]
        data = data[msg_size:]

        frame=pickle.loads(frame_data, fix_imports=True, encoding="bytes")
        frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
        cv2.imshow('ImageWindow',frame)
        cv2.waitKey(1)
    except:
        print("ErrorForCameraserver")

    try:
        data2, address = server_socket.recvfrom(256)
        print(data2)
        if data2.decode('utf-8') == 'ileri':
            print("Başarılı ileri")
        if data2.decode('utf-8') == 'geri':
            print("Başarılı geri")
        if data2.decode('utf-8') == 'sag':
            print("Başarılı sag")
        if data2.decode('utf-8') == 'sol':
            print("Başarılı sol")

    except:
        print("Error")

пожалуйста, позаботьтесь не про порт и ip номера. это просто для того, чтобы показать, что происходит. Я просто хочу отправить данные камеры и те же данные о простой строке. Строка не важна отсюда. Когда я нажимаю "ileri Git", он работает правильно. Но пока это работает, я не могу нажать другую кнопку или я не могу что-то сделать. здесь у нас есть решение этой проблемы? Большое вам спасибо.

...