Low Orbit Flux Logo 2

Python Tutorial - Part 8: Network / Socket Programming

Client1.py


"""
   client:
"""


import socket

HOST = '127.0.0.1'  # connect to the local host
PORT = 12345        # connect to this port

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))         # connect to the server
    s.sendall(b'Hello world')       # send some data to the server
    while True:                     # loop to recv data
        data = s.recv(1024)      # recv data
        if not data:                # no more data to recv
            break                   # break loop
        print('From server: ' + repr(data))
        ## could continue communication
        ## OR 
        ## look for a delimiter

Server1.py


"""
    Server
        - can only handle one conection at a time
"""


import socket                

#host = '127.0.0.1'    # listen on the local host only
#host = 'example.org'  # listen on IP that resolves to this host name
host = ''              # leave blank to listen on any IP or interface
port = 12345           # above 1023 are non-privileged, 1-65535
  
s = socket.socket()                 # open a socket
s.bind((host, port))                # bind to a host and port
s.listen(5)                        # start listening, optional (in Python py 3.5) backlog number for pending connections
print( "Listening on " + str(host) + ":" + str(port))

while True:                         # loop for connections ( one at a time )
    conn, addr = s.accept()         # block and wait for incoming connections
    print("Connection from " +  str(addr))
    while True:                     # loop to recv data
        data = conn.recv(1024)      # recv data
        if not data:                # no more data to recv (socket closed!!)
            break                   # break loop
        print("recv: " + str(data))
        conn.sendall(data)   # send data back
    print("Connection closed: " + str(addr))
    conn.close()                    # close connection

Server2.py


"""
    Server:
        - can handle multiple connections
"""


import socket       
from threading import Thread         

#host = '127.0.0.1'    # listen on the local host only
#host = 'example.org'  # listen on IP that resolves to this host name
host = ''              # leave blank to listen on any IP or interface
port = 12345           # above 1023 are non-privileged, 1-65535
  
s = socket.socket()                 # open a socket
s.bind((host, port))                # bind to a host and port
s.listen(5)                        # start listening, optional (in Python py 3.5) backlog number for pending connections
print( "Listening on " + str(host) + ":" + str(port))


def handle_connection():
    conn, addr = s.accept()         # block and wait for incoming connections
    print("Connection from " +  str(addr))
    while True:                     # loop to recv data
        data = conn.recv(1024)      # recv data
        if not data:                # no more data to recv (socket closed!!)
            break                   # break loop
        print("recv: " + str(data))
        conn.sendall(data)   # send data back
    print("Connection closed: " + str(addr))
    conn.close()                    # close connection


while True:                               # loop for connections ( each in a parallel thread )
    t = Thread(target=handle_connection)  # create a new thread
    t.start()                             # start it