[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