Python Socket programming

poruka: 8
|
čitano: 2.303
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Python Socket programming

Ovako, trenutno učim net programiranje u Pythonu i naišao sam na jedan meni neriješiv problem...
Neznam što da upišem pod host u client aplikaciji tako da se client spaja online s nekog drugog
računala na moje, a ne preko localhosta... Bilo kakva pomoć je dobrodošla! btw probao sam s
http://www.whatismyip.com/ i sa socket.gethostname() i ništa... , whatismyip izazva TimedOut a
sa socket.gethostname izaziva neki error koji ja nisam vidio jer sam testirao s prijeteljem...

Kodovi:
from socket import *
import sys
import os

bufsiz = 4096
host = ''
port = 53455
addr = (host, port)

class ServCmd:
    def __init__(s):
        s.__serv = socket( AF_INET, SOCK_STREAM )
        s.__serv.bind((addr))
        s.__cli = None
        s.__imlistening = 0
        s.__improcessing = 0
        s.__run()

    def __run(s):
        s.__imlistening = 1
        while s.__imlistening:
            s.__listen()
            s.__improcessing = 1
            while s.__improcessing:
                s.__procCmd()
            s.__cli.close()
        s.__serv.close()

    def __listen(s):
        s.__serv.listen(5)
        print '...listening'
        cli, addr = s.__serv.accept()
        s.__cli = cli
        print '...connected: ', addr

    def __procCmd(s):
        cmd = s.__cli.recv(bufsiz)
        if not cmd: return
        print cmd
        s.__servCmd(cmd)
        if s.__improcessing:
            proc = os.popen(cmd)
            outp = proc.read()
            if outp:
                s.__cli.send(outp)
            else:
                s.__cli.send('good')

    def __servCmd(s, cmd):
        cmd = cmd.strip()
        if cmd == 'BYE':
            s.__improcessing = 0

if __name__ == '__main__':
    serv = ServCmd()

Client

from socket import *
from time import time
from time import sleep
import sys
BUFSIZE = 4096
 
class CmdLine:
    def __init__(s,host):
        s.__HOST = host
        s.__PORT = 53455
        s.__ADDR = (s.__HOST,s.__PORT)
        s.__sock = None
 
    def makeConnection(s):
        s.__sock = socket( AF_INET,SOCK_STREAM)
        s.__sock.connect(s.__ADDR)
 
    def sendCmd(s, cmd):
        s.__sock.send(cmd)
 
    def getResults(s):
        data = s.__sock.recv(BUFSIZE)
        print data
  
if __name__ == '__main__':
    conn = CmdLine(???)
    conn.makeConnection()
    conn.sendCmd('DUMMY CMD')
    conn.getResults()
    conn.sendCmd('BYE')

Nisam ja napisao kod, prepisao sam ga iz tutoriala po kojem sam učio a kojeg više nemogu naći...

Poruka je uređivana zadnji put sub 6.11.2010 18:42 (Dangerous Code Games).
 
0 0 hvala 0
14 godina
neaktivan
offline
Python Socket programming

Dali se itko bavio server-client aplikacijama? Ako je, bio bih zahvalan kada bih mogao zaviriti malo u taj kod... Snaću ću se i u C++/C-u, unaprijed hvala!

Poruka je uređivana zadnji put ned 7.11.2010 17:27 (Dangerous Code Games).
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Python Socket programming

Na kojoj točno IP adresi se vrti server? Ako je na localhost (127.0.0.1), onda se klijent mora spojiti na taj isti host.

FYI, ovakav server sa remote execution forama nije pametno vrtit na tuđem računalu. Nadam se da znaš kaj radiš{#}

 

14 godina
neaktivan
offline
RE: Python Socket programming
Black Deus Typhon kaže...

Na kojoj točno IP adresi se vrti server? Ako je na localhost (127.0.0.1), onda se klijent mora spojiti na taj isti host.

FYI, ovakav server sa remote execution forama nije pametno vrtit na tuđem računalu. Nadam se da znaš kaj radiš{#}

 

gethostbyname() mi daje ovaj ip '192.168.1.21', 93.138.96.86 dobivam na online servisima... Misliš zbog toga da će netko poslati virus? Za ono što mi treba, potpuno sam siguran.

16 godina
neaktivan
offline
RE: Python Socket programming

Trebao bi iskonfigurirati svoj ruter da pušta promet prema tvojem serveru (navedenoj python skripti). Tj, onaj port koji server sluša bi trebao biti vidljiv izvana. Kak se to radi, konzultiraj "help" od rutera.

14 godina
neaktivan
offline
Python Socket programming
Hvala puno! Budem proučio!
 
0 0 hvala 0
14 godina
neaktivan
offline
Python Socket programming
Uspio sam to sklepati preko dyndns servisa, e sad nailazim na drugi problem, server nemože bindati tu adresu ni ovakav argument ' '... Kako da to popravim?
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Python Socket programming

Server bi trebao bindati na svoju lokalnu mašinu (192.168.etc). A tvoj ruter će (ako je sve iskonfigurirano kako treba) služiti samo kao proxy - sav promet prema vanjskoj adresi će forwardat prema tvojem lokalnom serveru. Tvoja vanjska adresa je adresa tvojeg rutera i nad tim nemaš nadzor - više manje. Pripazi da je ruter iskonfiguriran da prosljeđuje na pravi port - onaj koji si definirao u python sourcetu.

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice