How to do it...

We launch a UDS server that binds to a filesystem path, and a UDS client uses the same path to communicate with the server.

Listing 3.9a shows a Unix domain socket server, as follows:

#!/usr/bin/env python 
# Python Network Programming Cookbook, Second Edition -- Chapter - 3 
# This program is optimized for Python 2.7.12 and Python 3.5.2. 
# It may run on any other version with/without modifications. 
 
 
import socket 
import os 
import time 
 
SERVER_PATH = "/tmp/python_unix_socket_server" 
  
def run_unix_domain_socket_server(): 
    if os.path.exists(SERVER_PATH): 
        os.remove( SERVER_PATH ) 
      
    print ("starting unix domain socket server.") 
    server = socket.socket( socket.AF_UNIX, socket.SOCK_DGRAM ) 
    server.bind(SERVER_PATH) 
      
    print ("Listening on path: %s" %SERVER_PATH) 
    while True: 
        datagram = server.recv( 1024 ) 
        if not datagram: 
            break 
        else: 
            print ("-" * 20) 
            print (datagram) 
        if "DONE" == datagram: 
            break 
    print ("-" * 20) 
    print ("Server is shutting down now...") 
    server.close() 
    os.remove(SERVER_PATH) 
    print ("Server shutdown and path removed.") 
 
if __name__ == '__main__': 
    run_unix_domain_socket_server() 
 

Listing 3.9b shows a UDS client, as follows:

#!/usr/bin/env python 
# Python Network Programming Cookbook, Second Edition -- Chapter - 3 
# This program is optimized for Python 3.5.2. 
# It may run on any other version with/without modifications. 
# To make it run on Python 2.7.x, needs some changes due to API differences. 
# Follow the comments inline to make the program work with Python 2. 
 
 
import socket 
import sys 
 
SERVER_PATH = "/tmp/python_unix_socket_server" 
 
def run_unix_domain_socket_client(): 
    """ Run "a Unix domain socket client """ 
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) 
     
    # Connect the socket to the path where the server is listening 
    server_address = SERVER_PATH  
    print ("connecting to %s" % server_address) 
    try: 
        sock.connect(server_address) 
    except socket.error as msg: 
        print (msg) 
        sys.exit(1) 
     
    try: 
        message = "This is the message.  This will be echoed back!" 
        print  ("Sending [%s]" %message) 
 
        sock.sendall(bytes(message, 'utf-8')) 
        # Comment out the above line and uncomment
the below line for Python 2.7. # sock.sendall(message) amount_received = 0 amount_expected = len(message) while amount_received < amount_expected: data = sock.recv(16) amount_received += len(data) print ("Received [%s]" % data) finally: print ("Closing client") sock.close() if __name__ == '__main__': run_unix_domain_socket_client()

The server output is as follows:

$ python 3_9a_unix_domain_socket_server.py 
starting unix domain socket server. 
Listening on path: /tmp/python_unix_socket_server
-------------------- 
This is the message.  This will be echoed back!
  

The client output is as follows:

$ python 3_9b_unix_domain_socket_client.py 
connecting to /tmp/python_unix_socket_server 
Sending [This is the message.  This will be echoed back!]
  
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.137.163.208