Jon Engle wrote:

> Ok, so when I run the code it immediately terminates and never 'listens'
> to the ports in the loop. I have verified by running netstat -an | grep
> 65530 and the startingPort is not binding.

As I've already hinted the easiest way to keep your listening threads alive 
is to use the threading instead of the thread module:

$ cat bind_ports.py
#!/usr/bin/python
import socket
import threading
import sys

HOST = ''
STARTPORT = int(sys.argv[1])
ENDPORT = int(sys.argv[2])


def setup(port):
    print 'setting up port', port
    addr = (HOST, port)

    serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serv.bind(addr) 
    serv.listen(1)

    conn, addr = serv.accept()
    print 'port', port, '...connected!'

    conn.sendall('TEST')
    conn.close()

    print 'port', port, '...CLOSED!'

if __name__ == "__main__":
    for port in range(STARTPORT, ENDPORT):
        threading.Thread(target=setup, args=(port,)).start()
$ python bind_ports.py 11110 11113 &
[1] 9214
$ setting up port 11110
setting up port 11111
setting up port 11112
netstat -an | grep 1111
tcp        0      0 0.0.0.0:11110           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:11111           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:11112           0.0.0.0:*               LISTEN     


To test it I've applied a minor modification to the client of the echoserver 
example in https://docs.python.org/2/library/socket.html#example

$ cat read_socket.py 
import socket
import sys

HOST = 'localhost'
PORT = int(sys.argv[1])
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)
$ python read_socket.py 11110
port 11110 ...connected!
port 11110 ...CLOSED!
Received 'TEST'
$ python read_socket.py 11112
port 11112 ...connected!
port 11112 ...CLOSED!
Received 'TEST'
$ python read_socket.py 11111
port 11111 ...connected!
port 11111 ...CLOSED!
Received 'TEST'
$ fg
bash: fg: Programm ist beendet.
[1]+  Fertig                  python bind_ports.py 11110 11113
$

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to