[PIPython] leggere linee su socket

Cris. Lor. htdcris
Ven 19 Nov 2004 15:16:49 CET


Ciao,
sto leggendo il libro 
UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking 
non conosco il C e sono proprio agli inizi col python,
sono arrivato ad uno dei primi esempi che spiega come fare un piccolo client che si collega ad un server e cerca di ricevere una stringa contenente data e ora. L'esempio è in C ed io ho pensato fosse utile per me cercare di tradurlo in python.
La versione in C è questa:
----------------------------------
Figure 1.5 TCP daytime client.
intro/daytimetcpcli.c

 1 #include  "unp.h"

 2 int
 3 main(int argc, char **argv)
 4 {
 5     int     sockfd, n;
 6     char    recvline[MAXLINE + 1];
 7     struct sockaddr_in servaddr;

 8     if (argc != 2)
 9         err_quit("usage: a.out <IPaddress>");

10     if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
11         err_sys("socket error");

12     bzero(&servaddr, sizeof(servaddr));
13     servaddr.sin_family = AF_INET;
14     servaddr.sin_port = htons(13);  /* daytime server */
15     if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
16         err_quit("inet_pton error for %s", argv[1]);

17     if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
18         err_sys("connect error");

19     while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
20         recvline[n] = 0;        /* null terminate */
21         if (fputs(recvline, stdout) == EOF)
22             err_sys("fputs error");
23     }
24     if (n < 0)
25         err_sys("read error");

26     exit(0);
27 }

----------------------------

Io ho provato a tradurlo in python così:

-----------------------------
import socket

MiaSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
MiaSocket.connect(('206.168.112.96', 13))
LineaLetta = MiaSocket.readline()
while LineaLetta > 0:
    print LineaLetta
MiaSocket.close()
--------------------------

Quando lo lancio, dopo qualche secondo di attesa (dovuto presumo al timeout) mi da il seguente errore: 

Traceback (most recent call last):
  File "D:\cris\Python\esempio socket timetcpclient tradotto da c.py", line 4, in -toplevel-
    MiaSocket.connect(('206.168.112.96', 13))
  File "<string>", line 1, in connect
error: (10054, 'Connection reset by peer')

---------------------------------------

io ho usato la socket come un file da leggere ma non capisco.. o perlomeno mi sa che ho sbagliato qualcosa..

nel listato in C si parla di htons e pton, ma mi pare che pyton faccia gia la conversione degli indirizzi in automatico, quindi li ho scartati.. giusto?

il fatto che sia su windows XP puo' influire? ho letto che non tutti i comandi del modulo socket sono multipiattaforma... 

Spreste dirmi dove sbaglio?
Ho provatoa d andare avanti nel libro, ma se continuo senza capire questo mi porto avanti dei buchi pericolosi..

grazie 
Cris






 
 
 --
 Email.it, the professional e-mail, gratis per te: http://www.email.it/f
 
 Sponsor:
 Oltre 170 corsi già svolti, fruiti stando comodamente seduti
* a casa propria. Completi, professionali, facili ed economici. La formazione informatica on line è solo su Manuali.net!
 Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid#39&d-8
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://list.zope.it/pipermail/python/attachments/20040810/c16a5502/attachment.html


More information about the Python mailing list