PDA

Visualizza la versione completa : [Python] Problema client/server esterno


Movida
19-09-2016, 10:28
Un saluto a tutto il forum, sono nuovo.
Devo fare questo programmino semplice e se lo provo sul pc fila tutto liscio. Il problema è che lo devo provare su un server esterno, che richiede anche user e password per entrare.
Ho pensato di impostare ftp su lato server ma non c'è niente da fare. Se lascio tutto così come ve lo incollo, alla fine sul lato client mi dice "ssh-2.0-openssh_5.3 python".
Sicuramente devo mettere qualcosa sul lato server, ma come devo impostarlo?

Client

# -*- coding: utf-8 -*
import pickle
host = '95.110.230.165'
port = 22
from socket import * # importa tutti i nomi delle funzioni di socket
client = socket(AF_INET, SOCK_STREAM) # utilizzo il protocollo tcp/ip
client.connect((host, port))
tipo_giocata = raw_input("Scegli cosa giocare tra ambo, terno, quaterna, cinquina: ")
ruota = raw_input("Su quale ruota vuoi effettuare la giocata? ")
if tipo_giocata=='ambo':
num_input=2
if tipo_giocata=='terno':
num_input=3
if tipo_giocata=='quaterna':
num_input=4
if tipo_giocata=='cinquina':
num_input=5
numeri_da_giocare = [ruota]
for count in range(0,num_input):
numero_inserito = raw_input("Inserisci il numero da giocare: ")
numeri_da_giocare.append(numero_inserito)
numeri_da_inviare = pickle.dumps(numeri_da_giocare)
client.send(numeri_da_inviare)
esito_estrazione = client.recv(2048)
print 'Esito estrazione: ', esito_estrazione
raw_input("Premi invio per terminare")
client.close()

Server

# -*- coding: utf-8 -*-
import pickle, random
from socket import *
port = 22
server = socket(AF_INET, SOCK_STREAM) # utilizzo il protocollo tcp/ip
server.bind(('',port))
server.listen(1) # accetta al massimo una connessione e rifuta quelle successive
print ("Connessione con il server stabilita con successo")
while 1: # il server resta in ascolto fino alla connessione di un client
connection, address = server.accept()
numeri_client_serializzati = connection.recv(2048)
numeri_ricevuti = pickle.loads(numeri_client_serializzati)
ruota_da_giocare = numeri_ricevuti[0]
numeri_da_giocare = []
for count in range(1,len(numeri_ricevuti)):
numeri_da_giocare.append(int(numeri_ricevuti[count]))
ruota = ['Bari','Cagliari','Firenze','Genova','Milano','Nap oli','Palermo','Roma','Torino','Venezia','Nazional e']
for count in range(0,len(ruota)): # ripete l'estrazione dei numeri per ogni ruota
numeri_ruota = random.sample(range(1,91),5) # estrae 5 numeri a caso in un insieme compreso tra 1 e 90
print (ruota[count] , numeri_ruota) # controllo la ruota con quella ricevuta dal client
if ruota[count] == ruota_da_giocare:
contatore = 0
for i in range(0,len(numeri_da_giocare)):
for j in range(0,len(numeri_ruota)):
if (numeri_da_giocare[i] == numeri_ruota[j]):
contatore = contatore + 1

if(contatore == 0):
esito_estrazione = "Mi dispiace, non hai vinto."
if(contatore == 1):
esito_estrazione = "Mi dispiace, non hai vinto."
if(contatore == 2):
esito_estrazione = "Complimenti, hai fatto ambo!!!"
if(contatore == 3):
esito_estrazione = "Complimenti, hai fatto terno!!!"
if(contatore == 4):
esito_estrazione = "Complimenti, hai fatto quaterna!!!"
if(contatore == 5):
esito_estrazione = "Complimenti, hai fatto cinquina!!!"
connection.sendall(esito_estrazione)
connection.close()

YuYevon
19-09-2016, 11:02
Per il server stai usando la porta 22 che è tipicamente destinata ad SSH. Stai sviluppando una tua applicazione client/server, devi usare una porta "custom" tra quelle non registrate per servizi standard, a meno che tu non abbia intenzione di sfruttare proprio il protocollo SSH per la comunicazione (caso in cui le cose sono decisamente più complicate).

Movida
19-09-2016, 11:38
Come dati per connettermi al server, mi hanno dato l'ip e la porta che vedi nel codice. E devo far collegare client e server lì. Se la porta 22 è riservata non si può fare? Tramite ftp mi collego al sito. Posso fare qualcosa del genere tramite ftp?

Loading