Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności:
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Problem serwer-klient  (Przeczytany 166 razy)
« : 19:56 03/12/18 »
maripoosa Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 10


Hej,
Mam problem z wysyłaniem wiadomości z klienta do serwera i nie wiem czym to jest spowodowane. Gdyż serwer łączy się z klientem a jak chce coś wpisać to nic się nie dzieje.
Dodaje linka do zdjęcia w który jest pokazane jak się łączą oraz kod klienta.
https://zapodaj.net/c6ad6728d669e.jpg.html
Bardzo proszę o pomoc bo na necie nie ma tego za dużo a już wszystkiego próbowałam.
Zapisane
« Odpowiedz #1 : 04:34 04/12/18 »
Guaz Offline
Professional Python User

Zobacz profil
***

Reputacja: 41
Płeć: Mężczyzna
Wiadomości: 334


W `'def connect'` na pewno przed `'socket'` powinno być `'self'`?
No i jeśli chcesz skorzystać z metody klasy `'socket'` którą przypisałeś do `'self.__socket__'` to `'self.socket'` nie zadziała Uśmiech
Albo socket.connect...
Albo self.__socket__.connect...
Jedno z dwóch powinno zaskoczyć, osobiście biblioteki nie znam, ale wydaje mi się że to tutaj tkwi babol Chichot.
Zapisane

Python 3.5.2 / Mint
« Odpowiedz #2 : 09:18 04/12/18 »
maripoosa Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 10


Nic to nie zmieniło
Zapisane
« Odpowiedz #3 : 22:45 04/12/18 »
Guaz Offline
Professional Python User

Zobacz profil
***

Reputacja: 41
Płeć: Mężczyzna
Wiadomości: 334


Fakt, teraz się przyjrzałem że connect wykonujesz w __init__...
Anyway, byłoby łatwiej gdybyś wkleił/wkleiła kod na forum w {code=python}{/code} Uśmiech (Zamieniając klamry na kwadratowe nawiasy)

Ale wracając do problemu.
Dopisz w metodzie __init__ taką linię:
Kod
        self.send("wiadomość")
A w linii `'self.socket.send'`, zamień `'socket'` na `'__socket__'`.

Prawdopodobnie wyrzuci ci błąd, chyba że gdzieś masz zainicjalizowaną zmienną `'MSGLEN'`, jeśli się pojawi taki błąd to zdefiniuj ją póki co na sztywno w metodzie.

No i napisz czy pomogło, coś się zmieniło itd. Uśmiech
Zapisane

Python 3.5.2 / Mint
« Odpowiedz #4 : 14:40 06/12/18 »
maripoosa Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 10


Już mi wszystko działa ogólnie pozmieniałam trochę ten mój kod zwłaszcza w main. Dodaje tu zdjęcie kodu może się komuś przyda. https://zapodaj.net/08c457121a100.jpg.html

Teraz chce tak zmienić ten kod aby można było wpisywać własne wiadomości w terminal a client je przesyłał przez serwer do drugiego clienta.
Jak by ktoś miał pomysł jak można to pozmieniać to niech da znać.
Zapisane
« Odpowiedz #5 : 16:37 06/12/18 »
Guaz Offline
Professional Python User

Zobacz profil
***

Reputacja: 41
Płeć: Mężczyzna
Wiadomości: 334


No to dobrze że druga rada pomogła, nawet lepiej że przepisałaś send do main'a Uśmiech.

Co do wysyłania to już jest proste:

Jeśli chcesz za każdym połączeniem wysyłać jedynie jedną wiadomość:
-Przeanalizuj sobie ten kod
Kod
#~ __name__ = sys_test.py
#~ Wywołanie z terminalu: python3 sys_test.py wiadomość
#~ Treść:
import sys
 
print(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])
for some in sys.argv:
   print(some)
 

Jeśli chcesz wysyłać wiadomości od uruchomienia programu aż do 'zakończenia połączenia':
-Przeanalizuj sobie ten kod
Kod
 
while True:
   msg = input("Treść wiadomości:")
   print(msg)
   if not msg: #~Zostawiasz puste
       break
 

Drugi ma tą zaletę, że normalnie możesz używać spacji, pierwsza będzie to jako osobne argumenty traktować, chyba że poprzedzisz spację znakiem `\`.

I jeszcze, polecam MSGLEN już nie robić roboczo w send, tylko narzucić klasie pewne ograniczenie Uśmiech.
Zapisane

Python 3.5.2 / Mint
« Odpowiedz #6 : 21:40 06/12/18 »
maripoosa Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 10


Mam kolejny i możliwie ostatni problem.
Bo chciałabym zrobić funkcję która będzie mi zwracała czy wiadomość została wysłana czy nie. W języku C# są już wbudowane np return OK. W pythonie to tak nie działa próbowałam zastosować raise ale on nie działa tak jak bym chciała.
Zapisane
« Odpowiedz #7 : 10:34 07/12/18 »
Guaz Offline
Professional Python User

Zobacz profil
***

Reputacja: 41
Płeć: Mężczyzna
Wiadomości: 334


Tutaj też masz coś takiego jak return, i z tego co wiem niewiele się różni od C# Uśmiech.

Kod
def funkcja(msg):
   print(msg)
   return "OK"
 
funkcja("msg") #Wypisze "msg" na ekranie, i zwróci w pustkę "OK".
a = funkcja("msg2") #Wypisze "msg2" na ekranie, i zwróci "OK" które zostanie przypisane do zmiennej 'a'
print(a) #Wypisze treść zmiennej 'a' na ekranie, czyli "OK"
Jak widać na powyższym przykładzie, można funkcje wywołać i nigdzie nie przypisać jej wyniku co już pewnie znasz, ale z returnem pojawia się sens przypisania go gdzieś Uśmiech.
Można też funkcje wywołać bez return i przypisać jej wynik do zmiennej, ale wtedy funkcja zwróci 'None' (odpowiednik null'a).

Mógłbym przykład podać na twoim kodzie, ale nie chce mi się go przepisywać Język.
Zapisane

Python 3.5.2 / Mint
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2018 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot