How to do it...

We use the same approach as writing an echo client/server using IPv6. The only major difference is how the socket is created using IPv6 information.

Listing 12a shows an IPv6 echo 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 argparse  
import socket 
import sys 
 
HOST = 'localhost' 
 
def echo_server(port, host=HOST): 
    """Echo server using IPv6 """ 
    for result in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE): 
        af, socktype, proto, canonname, sa = result 
        try: 
            sock = socket.socket(af, socktype, proto) 
        except socket.error as err: 
            print ("Error: %s" %err) 
         
        try: 
            sock.bind(sa) 
            sock.listen(1) 
            print ("Server lisenting on %s:%s" %(host, port)) 
        except socket.error as msg: 
            sock.close() 
            continue 
        break 
        sys.exit(1) 
    conn, addr = sock.accept() 
    print ('Connected to', addr) 
    while True: 
        data = conn.recv(1024) 
        print ("Received data from the client: [%s]" %data) 
        if not data: break 
        conn.send(data) 
        print ("Sent data echoed back to the client: [%s]" %data) 
    conn.close() 
 
if __name__ == '__main__': 
    parser = argparse.ArgumentParser(description='IPv6 Socket
Server Example') parser.add_argument('--port', action="store", dest="port",
type=int, required=True) given_args = parser.parse_args() port = given_args.port echo_server(port)

Listing 12b shows an IPv6 echo client, 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 argparse 
import socket 
import sys 
 
HOST = 'localhost' 
BUFSIZE = 1024 
 
def ipv6_echo_client(port, host=HOST): 
    for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 
        af, socktype, proto, canonname, sa = res 
        try: 
            sock = socket.socket(af, socktype, proto) 
        except socket.error as err: 
            print ("Error:%s" %err) 
        try: 
            sock.connect(sa) 
        except socket.error as msg: 
            sock.close() 
            continue 
    if sock is None: 
        print ('Failed to open socket!') 
        sys.exit(1) 
    msg = "Hello from ipv6 client" 
    print ("Send data to server: %s" %msg) 
    sock.send(bytes(msg.encode('utf-8'))) 
    while True: 
        data = sock.recv(BUFSIZE) 
        print ('Received from server', repr(data)) 
        if not data:  
            break 
    sock.close() 
     
 
if __name__ == '__main__':  
    parser = argparse.ArgumentParser(description='IPv6 socket
client example') parser.add_argument('--port', action="store", dest="port",
type=int, required=True) given_args = parser.parse_args() port = given_args.port ipv6_echo_client(port)

The server output is as follows:

$ python 3_12a_ipv6_echo_server.py --port=8800 
Server lisenting on localhost:8800
('Connected to', ('127.0.0.1', 56958))
Received data from the client: [Hello from ipv6 client]
Sent data echoed back to the client: [Hello from ipv6 client]
  

The client output is as follows:

$ python 3_12b_ipv6_echo_client.py --port=8800 
Send data to server: Hello from ipv6 client
('Received from server', "'Hello from ipv6 client'") 
  

The following screenshot indicates the server and client output:

IPv6 Echo Server and Client
..................Content has been hidden....................

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