Nowe posty

Autor Wątek: [python] problem z polaczeniem servera z klientem  (Przeczytany 4145 razy)

Offline 920806

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 101
    • Zobacz profil
[python] problem z polaczeniem servera z klientem
« dnia: 2017-02-20, 11:37:40 »
Witam,

Napisałem 2 skrypty przy pomocy modulu socket.
Jeden z nich pełni role serwera,a drugi klienta(wszystko na jednym komputerze).

Server nasłuchuję na porcie 8989,pod adresacja 127.0.0.1
Klient ma sie podłączyć pod ten adres, no i w sumie to robi.



Ale gdy chce zmienić adres ip server na np. 192.168.1.10 otrzymuje komunikat:
OSError: [Errno 99] Cannot assign requested adress.
Wszystkie skrypty odpalam przez python 3.5

Ostatecznie chciał bym osiągnąć komunikacje miedzy dwoma komputerami ..ale czy jak podam adres pętli zwrotnej na jednym komputerze to klient na drugim nie będzie próbował sie komunikować ze swoja własną pętlą? To bez sensu ,z drugiej strony jak wskazać serwer klientowi jeśli nie moge mu przypisać innej adresacji ..jesli trzeba udostępnię kod :)
Steve Wozniak nie wiedział .. ~ ~ https://www.youtube.com/watch?v=FG1AQcGGSec ~~ / "Uparty jak nigdy" /P3@CE , L0\/E & rock'|\|'roII

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2279
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • Linuxpedia.PL
Odp: [python] problem z polaczeniem servera z klientem
« Odpowiedź #1 dnia: 2017-02-20, 15:59:09 »
jesli trzeba udostępnię kod :)

No, trzeba. Z informacją o adresacji obu komputerów.
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy
Jeżeli uważasz, że warto: 1AfKbLX6nZSqv5DNhXMNLivc9fXwaHMd4Z

Offline 920806

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 101
    • Zobacz profil
Odp: [python] problem z polaczeniem servera z klientem
« Odpowiedź #2 dnia: 2017-02-20, 17:46:22 »
Żeby nie mieszać ..Zmieniłem adresację na tę działającą

Serwer:

import socket
#
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
adres_s = ("127.0.0.1",8989)
s.bind(adres_s)
s.listen(5)
 
while True:
    c,a = s.accept()
    print("Odpowiedź z:",a)
    c.send("Hello",a[0])
    s.close()

klient:
import socket
 
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 
adres= ("127.0.0.1",8989)
 
s.connect(adres)
 
s.send("HELLO".encode('utf-8'))
 
s.close()


W przypadko drugiego komputer zapomniałem uwzględnić 1 ważny szczegół .. komputer działa pod Windowsem ..:/. Post pisałem w pracy :( ..|

adresacja :
komputer1 linux(serwer)

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       
inet 192.168.1.3  netmask 255.255.255.0  broadcast 192.168.1.255


komputer 2 (klient)
 Adres IPv4. . . . . . . . . . . . . : 192.168.1.2(Preferowane)
 Maska podsieci. . . . . . . . . . : 255.255.255.0
 Brama domyślna. . . . . . . . . . : 192.168.1.1
 Serwer DHCP . . . . . . . . . . . : 192.168.1.1
 Serwery DNS . . . . . . . . . . . : 192.168.1.1
Steve Wozniak nie wiedział .. ~ ~ https://www.youtube.com/watch?v=FG1AQcGGSec ~~ / "Uparty jak nigdy" /P3@CE , L0\/E & rock'|\|'roII

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2279
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • Linuxpedia.PL
Odp: [python] problem z polaczeniem servera z klientem
« Odpowiedź #3 dnia: 2017-02-20, 18:14:35 »
Nie widzę, żeby któryś z komputerów miał adres 192.168.1.10. Serwer musi słuchać na którymś z adresów przypisanych komputerowi na którym działa, albo na specjalnym adresie 0.0.0.0 (IPv4)/::0 (IPv6) oznaczającym słuchanie na wszystkich dostępnych interfejsach.
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy
Jeżeli uważasz, że warto: 1AfKbLX6nZSqv5DNhXMNLivc9fXwaHMd4Z

Offline 920806

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 101
    • Zobacz profil
Odp: [python] problem z polaczeniem servera z klientem
« Odpowiedź #4 dnia: 2017-02-20, 18:59:54 »
Po zmianie adresacji , dostaję taki komunikat
 
s.connect(adres)
OSError: [WinError 10049] Żądany adres jest nieprawidłowy w tym kontekście

Po wyłączenie zapory ten sam komunikat , nie wiem gdzie powienienem zacząć szukać .. Cały skrypt jest oparty o kod z dokumentacji ...

Tak przy okazji , czy dane przesyłane przez klienta są określne i serwer sprawdza co się mu wysyła ?
mam na myśli sytuacje,gdy nie użyje metody get w metodzie send(),a raczej zwykły tekst np. Hello Word
Steve Wozniak nie wiedział .. ~ ~ https://www.youtube.com/watch?v=FG1AQcGGSec ~~ / "Uparty jak nigdy" /P3@CE , L0\/E & rock'|\|'roII

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2279
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • Linuxpedia.PL
Odp: [python] problem z polaczeniem servera z klientem
« Odpowiedź #5 dnia: 2017-02-21, 13:21:34 »
Błąd 10049 znaczy, że serwer próbuje otworzyć usługę na IP nie należącym do komputera, na którym jest ona uruchamiana.

Ponawiam:
 Jeżeli serwer ma przypisane następujące adresy: 127.0.0.1 (loopback) i a.b.c.d (karta sieciowa), to Pythonowy bind możesz zrobić tylko do adresów '127.0.0.1', 'a.b.c.d' i '' (pusty string). Bind do jakiegokolwiek innego adresu zwróci błąd, akurat 10049 w przypadku Windowsa.
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy
Jeżeli uważasz, że warto: 1AfKbLX6nZSqv5DNhXMNLivc9fXwaHMd4Z

Offline 920806

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 101
    • Zobacz profil
Odp: [python] problem z polaczeniem servera z klientem
« Odpowiedź #6 dnia: 2017-02-21, 17:06:06 »
Temat można zamknąć,Działa pięknie ..:)

Błąd polegał w złym adresie ip klienta , myślałem że należy podać w argumencie adres ip który podałem w metodzie bind() serwera... Ktoś mądry mi podpowiedział i należy podać adres IP maszyny, na której jest odpalony serwer , a sam serwer zostanie odnaleziony po numerze portu.. Nie wiem dla czego to mi uciekło :)

« Ostatnia zmiana: 2017-02-21, 17:09:49 wysłana przez 920806 »
Steve Wozniak nie wiedział .. ~ ~ https://www.youtube.com/watch?v=FG1AQcGGSec ~~ / "Uparty jak nigdy" /P3@CE , L0\/E & rock'|\|'roII

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2279
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • Linuxpedia.PL
Odp: [python] problem z polaczeniem servera z klientem
« Odpowiedź #7 dnia: 2017-02-21, 17:47:52 »
o.O

Z czystej, dydaktycznej ciekawości: co dawałeś klientowi zamiast adresu serwera świadczącego usługę?
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy
Jeżeli uważasz, że warto: 1AfKbLX6nZSqv5DNhXMNLivc9fXwaHMd4Z

Offline 920806

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 101
    • Zobacz profil
Odp: [python] problem z polaczeniem servera z klientem
« Odpowiedź #8 dnia: 2017-02-21, 19:12:07 »
Odpowiedź jest w kodzie wyżej :). Albo 127.0.0.1 ,albo 0.0.0.0 ale nie wpadłem na to żeby podać adres ip komputera ... Dla tego trybiło na Linuxie , bo klienta odpalałem w drugiej karcie terminala na tej samej maszynie.

Ahhh.. brakło koncentracji i wiedzy ..2 dni zmarnowane :) Zapamiętam do końca życia
Steve Wozniak nie wiedział .. ~ ~ https://www.youtube.com/watch?v=FG1AQcGGSec ~~ / "Uparty jak nigdy" /P3@CE , L0\/E & rock'|\|'roII