Programming Sockets in Python
EDIT: I am sorry for derping out of control. When I initially published this post it was called “Programming Web Sockets in Python”, this is just flat out wrong. What we are making here is just a regular socket. Web Sockets and regular sockets are similar but are certainly not the same thing. I hope you will still find this useful! Sockets are pretty much the basis of how applications work on the Internet. Python makes it super easy to get started programming sockets. In this brief introduction we will create a simple server that greets the user when it receives incoming requests from the client application. Due to my recent obsession with Linux Containers we will also be implementing this inside of two containers. Containers make it really simple to simulate a network because you can create additional hosts in seconds.
Creating your Containers
I am running Ubuntu 14.04. So creating two additional containers can be achieved by running the following as the root user.lxc-create -t download -n pyServerChoose ubuntu, trusty, amd64 when prompted
Then clone the first container
lxc-clone -o pyServer -n pyClient
Running the Server
Now that we have created our containers lets jump into our server container and fire up our simple server application. We can start up the container by issuing the following command as root:lxc-start -n pyServer -d
, this will start the container as a daemon. Let’s go ahead and get into by attaching the container. I like to do this inside of screen so that we can easily get in and out of the container. Create a screen session screen -dRR pyServer
and once inside the screen attach the container lxc-attach -n pyServer
Once we are inside the container we need to install python and launch our simple server.
apt-get install python vim pyServer.py
from socket import *serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind((’’, serverPort))
print “The server is ready to rock and roll!"while 1:
name, clientAddress = serverSocket.recvfrom(2048)
response = “Hello “ + str(name) + ”! You are really good at socket programming”
serverSocket.sendto(response, clientAddress)
python pyServer.py
if all goes well you should see a message that states This server is ready to rock and roll! Exit the container (and the screen session) by pressing Ctrl+a and Ctrl+d
Running the Client
Now that we have our server up and running, lets get our client working as well. Before we move forward, lets grab the IP address of our server container because we will need it soon. You can get the IP by runninglxc-ls --fancy
. Launch the client container, attach it in screen, and install python in the same way that we did previously.
lxc-start -n pyClient -d screen -dRR pyClient lxc-attach -n pyClient apt-get install python vim pyClient.py
from socket import *# Replace the IP address in serverName with the IP of your container that you grabbed previously.
serverName = ‘10.0.3.211’ serverPort = 12000 clientSocket = socket(AF_INET, SOCK_DGRAM)
name = raw_input(‘Please enter your name:’)
clientSocket.sendto(name, (serverName, serverPort))response, serverAddress = clientSocket.recvfrom(2048) print response clientSocket.close()
python pyClient.py
. After entering your name and pressing enter you should see a response from your server with the encouraging message. This was a pretty trivial exercise, but we can quickly see that we can expand upon this basic code to create much more interesting and complex applications. We can also leverage the power and simplicity of LXC to create a simulated large network for distributed applications.
Thank you for reading! Share your thoughts with me on mastodon or via email.
Check out some more stuff to read down below.
Most popular posts this month
- Daggerversary
- Setting up ANTLR4 on Windows
- SQLite DB Migrations with PRAGMA user_version
- My Custom Miniflux CSS Theme
- Installing Nextcloud on a FreeBSD VPS
Recent Favorite Blog Posts
This is a collection of the last 8 posts that I bookmarked.
- "Let's pick the right product for you". from jwz
- Automattic is doing open source dirty from David Heinemeier Hansson
- Setting Up Mastodon Author Tags from Robb Knight • Posts • Atom Feed
- Getting my next SWE role from Emmanuel Blogs
- Methods of Mandarin from Isaak.net
- 12 Months of Mandarin from Isaak.net
- Villages Without Cars from Straphanger
- Some Go web dev notes from Julia Evans
Articles from blogs I follow around the net
TCP Server in Zig - Part 4 - Multithreading
We finished Part 1 with a simple single-threaded server, which we could describe as: Create our socket Bind it to an address Put it in "server" mode (i.e. call listen on it) Accept a connection Application logic involving reading/writing to t…
via openmymind.net October 11, 2024Nebraska Woman Files Suit Against All Homosexuals
A Nebraska woman identifying herself as the "ambassador" for plaintiffs "God and His Son, Jesus Christ," is suing all homosexuals on Earth for breaking "religious and moral laws". In the suit, entered into the docket as Driskell v. …
via jwz October 10, 2024Pluralistic: Cars bricked by bankrupt EV company will stay bricked (10 Oct 2024)
Today's links Cars bricked by bankrupt EV company will stay bricked: "Software-based car" is a warning, not a slogan. Hey look at this: Delights to delectate. This day in history: 2009, 2014, 2019, 2023 Upcoming appearances: Where to find me. …
via Pluralistic: Daily links from Cory Doctorow October 10, 2024Generated by openring