# Python Socket Programming

Socket programming is a way of connecting two nodes on a network to communicate with each other. One socket (node) listens on a particular port at an IP, while the other socket reaches out to the other to form a connection.

## Importing the Module

```python
import socket
```

## Creating a Socket

To create a socket, you use the `socket.socket()` function.

```python
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
```

## Server Implementation

A server has a `bind()` method which binds it to a specific IP and port so that it can listen to incoming requests on that IP and port.

```python
import socket

HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
PORT = 65432        # Port to listen on (non-privileged ports are > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    print(f"Listening on {HOST}:{PORT}")
    conn, addr = s.accept()
    with conn:
        print(f"Connected by {addr}")
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)
```

## Client Implementation

A client connects to the server using the `connect()` method.

```python
import socket

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 65432        # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)

print(f"Received {data!r}")
```

[[programming/python/python]]