• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python - odbieranie danych

VPS Starter Arubacloud
+1 głos
151 wizyt
pytanie zadane 3 maja 2021 w Python przez MIMIX Początkujący (260 p.)

Siemka, jak wczoraj miałem problem z wysyłaniem danych to teraz mam problem z odbieraniem, znaczy dane tak jak by się wysyłają ale crasuje się wtedy program. linijka 55

import socket,pygame

pygame.init()

(x,y) = (720,720)
screen = pygame.display.set_mode((x,y))
pygame.display.set_caption("Client")
frame = 0
cursorRect = pygame.Rect(13,19,13,19)
option = 0

SERVER_HOST = "192.168.0.35"
SERVER_PORT = 5002
separator_token = "<SEP>"

def blit(image,x,y):
    screen.blit(image,(x,y))

def blitText(text,x,y,font,size,bold,r,g,b):
    Font = pygame.font.Font(font,size)
    Font.set_bold(bold)
    Text = Font.render(text,True,(r,g,b))
    blit(Text, x,y)

class drawRect(object):

    def __init__(self,width,height,color,x,y,id):
        global header
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.true = True

    def drawRect(self, id):
        global option
        self.id = id
        self.tile = pygame.Rect(self.x, self.y, self.width, self.height)
        pygame.draw.rect(screen, (self.color), self.tile)
        self.clickDetect()
        if cursorRect.colliderect(self.tile):
            self.color = (100, 100, 100)
        elif option == self.id:
            self.color = (120,120,120)
        else:
            self.color = (70, 70, 70)

    def clickDetect(self):
        global option,s
        if self.tile.colliderect(cursorRect):
            button1,button2,button3 = pygame.mouse.get_pressed()
            if button1:
                s.sendto(f"{self.id}".encode('utf-8'), (SERVER_HOST,SERVER_PORT))
                option = s.recv(1024).decode('utf-8')


s = socket.socket()

Tile1 = drawRect(240,74,(80,80,80),0,0,1)
Tile2 = drawRect(240,74,(80,80,80),240,0,2)
Tile3 = drawRect(240,74,(80,80,80),480,0,3)

while True:
    screen.fill((48, 48, 48))
    (mouseX,mouseY) = pygame.mouse.get_pos()
    cursorRect.x = mouseX
    cursorRect.y = mouseY
    if frame == 0:
        blitText(f"[*] Connecting to {SERVER_HOST}:{SERVER_PORT}...",20,20,"assets/font/font1.ttf",13,True,122,10,10)
        pygame.display.update()
        s.connect((SERVER_HOST, SERVER_PORT))
        blitText("[+] Connected.",20,40,"assets/font/font1.ttf",10,True,0,210,10)
        pygame.time.delay(1000)
        frame = 1
    if frame == 1:
        header = (70,70,70)
        Tile1.drawRect(1)
        Tile2.drawRect(2)
        Tile3.drawRect(3)
        blitText("Aktualności",50,10,"assets/font/font1.ttf",32,False,255,255,255)
        blitText("Gry",340,10,"assets/font/font1.ttf",32,False,255,255,255)
        blitText("Konto",560,10,"assets/font/font1.ttf",32,False,255,255,255)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.QUIT
    pygame.display.update()

s.close()

 

komentarz 3 maja 2021 przez VBService Ekspert (251,210 p.)

Podaj proszę, treść komunikatu błędu.  smiley

komentarz 3 maja 2021 przez MIMIX Początkujący (260 p.)
właśnie nie ma żadnego błędu, z tym "crashuje" chodziło mi o to że program nie odpowiada i po jakimś czasie się wyłącza
komentarz 3 maja 2021 przez Oscar Nałogowiec (29,290 p.)
Nie znam pythona, ale normalnie sendto nie używa się z TCP. W TCP masz połączenie, więc rozmówca jest już ustalony. Trochę dziwnie też wygląda wołanie recv jako argument do send. Co chciałeś tam przekazać?
komentarz 3 maja 2021 przez MIMIX Początkujący (260 p.)
użyłem sendto bo jak uzywałem po prostu send to wyskakiwał błąd a co do s.recv to s to socket
komentarz 3 maja 2021 przez Oscar Nałogowiec (29,290 p.)
Dobra, źle spojrzałem, nie przewinąłem kodu.

Recv czeka na odebranie danych, więc normalne, że twój program się zatrzymuje. Z czym się łączysz? Jaki program działa na komputerze 192.168.0.35 na porcie 5002?
komentarz 3 maja 2021 przez MIMIX Początkujący (260 p.)

mam też server

import socket
from threading import Thread

SERVER_HOST = "192.168.0.35"
SERVER_PORT = 5002
separator_token = "<SEP>"
client_sockets = set()
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((SERVER_HOST, SERVER_PORT))
s.listen()
print(f"[*] Listening as {SERVER_HOST}:{SERVER_PORT}")

def inputData(cs):
    try:
        date = cs.recv(2046).decode('utf-8')
        if date != 0:
            print(date)
        if date == 1:
            client_socket.sendto("{options} = {self.id}".encode('utf-8'), (client_address, SERVER_PORT))
    except:
        pass

servRun = True
while servRun:
    client_socket, client_address = s.accept()
    client_sockets.add(client_socket)
    print(f"[+] {client_address} connected.")
    inputData(client_socket)

 

komentarz 3 maja 2021 przez Oscar Nałogowiec (29,290 p.)
A sprawdziłeś jak działa serwer np. telnetem? Serwer lepiej jest uruchomić na adresie 0.0.0.0 - wtedy może przyjmować połączenia od wszystkich.
komentarz 3 maja 2021 przez MIMIX Początkujący (260 p.)
nic się nie zmieniło jak zmieniłem adres na 0.0.0.0, a i jeszcze dodam że na pewno klient jest połączony z serwerem. wymiana Klient - Serwer normalnie działa (chodzi o to że serwer odczytuje dane wysłane z klienta) ale Serwer - Klient tak jak pisałem w poście crasuje program
komentarz 3 maja 2021 przez Oscar Nałogowiec (29,290 p.)
Pozostaje pytanie czy serwer odsyła cokolwiek do klienta.
komentarz 3 maja 2021 przez MIMIX Początkujący (260 p.)
tak, serwer odsyła dane, zmodulowałem kod aby na początku serwer wysłał wiadomość test i potem aby klient wypisywał to co dostanie od serwera. dzięki temu też chyba zlokalizowałem błąd, kiedy za komentowałem linijkę w pliku serwera która wysyła tą wiadomość klientowi tak samo program się z crashował teorytycznie przed tamtą linijką o której jest całe pytanie jest linijka która coś odsyła ale może jest coś co ją "opóźnia" lub są to dwa od dzielne błędy które mają taki sam skutek

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 103 wizyt
pytanie zadane 2 maja 2021 w Python przez MIMIX Początkujący (260 p.)
0 głosów
0 odpowiedzi 293 wizyt
0 głosów
0 odpowiedzi 77 wizyt
pytanie zadane 21 listopada 2020 w Sieci komputerowe, internet przez mrmaxerxxx Nowicjusz (120 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...