Re: Socket and cycle problem
On 12 Kvě, 21:06, Jean-Paul Calderone [EMAIL PROTECTED] wrote: On Mon, 12 May 2008 11:16:08 -0700 (PDT), [EMAIL PROTECTED] wrote: [snip] My script send me via 3883 port (VRPN) data, but only once. I need listening this port countinously. So I need make some loop to print data from 3883 port permanent. Data that I recevied looks liek this: receive data from server: 'vrpn: ver. 07.13 0\x00\xe8\x0b\x00\x00' I'm not sure if you need to write a server or a client. In your original code, you had a client which repeatedly established out- bound connections. Here, you say you need to listen on a port. Do you think its necessary to use Twisted? Do you have any ideas how to do it with socket modul? The basic version is pretty easy either way. However, with Twisted, you get cross-platform error handling without any extra effort, and you don't have to think about the boring low-level details of BSD sockets. Here's a Twisted server that listens on port 3883 forever and prints the data it receives from each connection after the remote side drops the connection: from twisted.internet import reactor from twisted.internet.protocol import ServerFactory, Protocol class PrintingProtocol(Protocol): def connectionMade(self): When the connection is first established, create a list into which to buffer all received data. self.received = [] def dataReceived(self, data): Whenever any data is received on this connection, add it to the buffer. self.received.append(data) def connectionLost(self, reason): When the connection is lost, print out the contents of the receive buffer. print repr(.join(self.received)) # Create a factory which will use our protocol to handle incoming # connections. factory = ServerFactory() factory.protocol = PrintingProtocol # Listen with it on port 3883 reactor.listenTCP(3883, factory) # Start the reactor. Nothing in this program will ever stop the # reactor, so it will run and accept connections forever. reactor.run() If you were to use the socket module, then it would look something like this: from socket import socket from errno import EINTR port = socket() port.bind(('', 3883)) port.listen(5) while True: try: server, clientAddr = port.accept() except socket.error, e: print Error accepting client connection, e else: received = [] while True: try: bytes = server.recv(1024 * 16) except socket.error, e: if e.errno == EINTR: continue else: break if not bytes: break received.append(bytes) print repr(.join(received)) Hope this helps, Jean-Paul Thanks for code. I am trying both of them, but I am crash to another problem. For socket modul example python report: Traceback (most recent call last): File C:\Documents and Settings\poupa\Plocha\listen2.py, line 5, in module port.bind(('', 3883)) File string, line 1, in bind error: (10048, 'Address already in use') and for twisted example pythod report: Traceback (most recent call last): File C:\Documents and Settings\poupa\Plocha\listen2twisted.py, line 8, in -toplevel- class PrintingProtocol(Protocol): File C:\Documents and Settings\poupa\Plocha\listen2twisted.py, line 28, in PrintingProtocol print repr(.join(self.received)) NameError: name 'self' is not defined How can I solve this errors? (for twisted I instal zope for python, pywin32 and twisted. all for python 2.4) -- http://mail.python.org/mailman/listinfo/python-list
Socket and cycle problem
Hello, I am beginner but so I need help. I have small script for receive data from port 3883, but it print only once. import socket HOST = 'localhost' PORT = 3883 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) data = s.recv(2048) s.close() print 'receive data from server:', `data` So I try to write cycle to this script, like this: import socket HOST = 'localhost' PORT = 3883 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) while 1: s.connect((HOST, PORT)) data = s.recv(2048) s.close() print 'receive data from server:', `data` But Python reporting: Traceback (most recent call last): File C:\Documents and Settings\poupa\Plocha\TCP3.py, line 7, in module s.connect((HOST, PORT)) File string, line 1, in connect File C:\Python25\lib\socket.py, line 141, in _dummy raise error(EBADF, 'Bad file descriptor') error: (9, 'Bad file descriptor') Where is the mistake? I dont know. thaks for help Petr -- http://mail.python.org/mailman/listinfo/python-list
Re: Socket and cycle problem
On 12 Kvě, 17:54, Jean-Paul Calderone [EMAIL PROTECTED] wrote: On Mon, 12 May 2008 08:34:07 -0700 (PDT), [EMAIL PROTECTED] wrote: Hello, I am beginner but so I need help. I have small script for receive data from port 3883, but it print only once. import socket HOST = 'localhost' PORT = 3883 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) data = s.recv(2048) s.close() print 'receive data from server:', `data` So I try to write cycle to this script, like this: import socket HOST = 'localhost' PORT = 3883 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) while 1: s.connect((HOST, PORT)) data = s.recv(2048) s.close() print 'receive data from server:', `data` But Python reporting: Traceback (most recent call last): File C:\Documents and Settings\poupa\Plocha\TCP3.py, line 7, in module s.connect((HOST, PORT)) File string, line 1, in connect File C:\Python25\lib\socket.py, line 141, in _dummy raise error(EBADF, 'Bad file descriptor') error: (9, 'Bad file descriptor') Where is the mistake? I dont know. You cannot reconnect a socket. You need to create a new one for each connection. It's also almost certainly the case that the way you are receiving data is incorrect. There is no guarantee that you will get 2048 bytes from socket.recv(2048). It isn't even guaranteed that all the bytes written to the socket by the peer will be returned by such a call. Instead, you need a framing protocol to determine when all data has been received. For example, you might length prefix the data, or you might insert a delimiter (or a terminator) at the end. Or if there is exactly one message to receive, then you should just read until the recv call returns '', indicating EOF. Jean-Paul ok thanks, but I am true greenhorn, so you think that the best way is write new script? Could you send me code if it isnt long, becase I have no idea and unfortunately time as well. Petr Petr -- http://mail.python.org/mailman/listinfo/python-list
Re: Socket and cycle problem
On 12 Kvě, 19:16, Jean-Paul Calderone [EMAIL PROTECTED] wrote: On Mon, 12 May 2008 09:19:48 -0700 (PDT), [EMAIL PROTECTED] wrote: [snip] Where is the mistake? I dont know. You cannot reconnect a socket. You need to create a new one for each connection. It's also almost certainly the case that the way you are receiving data is incorrect. There is no guarantee that you will get 2048 bytes from socket.recv(2048). It isn't even guaranteed that all the bytes written to the socket by the peer will be returned by such a call. Instead, you need a framing protocol to determine when all data has been received. For example, you might length prefix the data, or you might insert a delimiter (or a terminator) at the end. Or if there is exactly one message to receive, then you should just read until the recv call returns '', indicating EOF. Jean-Paul ok thanks, but I am true greenhorn, so you think that the best way is write new script? Could you send me code if it isnt long, becase I have no idea and unfortunately time as well. I'm not sure what you want to happen, so I can't write it for you. I suggest you start with Twisted instead of the socket module, though, as Twisted provides a higher-level interface to network programming. You can find some introductory documentation about writing clients here: http://twistedmatrix.com/projects/core/documentation/howto/clients.html Jean-Paul My script send me via 3883 port (VRPN) data, but only once. I need listening this port countinously. So I need make some loop to print data from 3883 port permanent. Data that I recevied looks liek this: receive data from server: 'vrpn: ver. 07.13 0\x00\xe8\x0b\x00\x00' Do you think its necessary to use Twisted? Do you have any ideas how to do it with socket modul? thanks for reply -- http://mail.python.org/mailman/listinfo/python-list
listen on TCP port
Hello, is it possibble listening on TCP port by python and how? I am trying chilkat but poorly :(. Thanks -- http://mail.python.org/mailman/listinfo/python-list
listening on TCP port
Hello, is there anybody who has experience with listening on TCP port with python? I am looking for anything codes, tutorials,... . Thanks for any information -- http://mail.python.org/mailman/listinfo/python-list