---
# System prepended metadata

title: TCP/UDP
tags: [TCP, python, UDP, Networking]

---

# TCP/UDP

###### tags: `Networking` `TCP` `UDP` `python`

[TOC]

## TCP client 

Library 
```python
import socket
```
socket is a kind of interface which uses to communicate between the server and client.

## Create the socket object
```python
#Create the socket object
ClientSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
```
AF means Address Family, INET use Standard IPv4

## Establish a connection 
```python
#Establish connection to the tagetHost
ClientSocket.connect((targetHost,targetPort))
```

## Send a message
```python
#Send a message
ClientSocket.send(b"GET /HTTP/1.1\r\nHost: google.com\r\n\r\n")
```

## Receive a message
```python
#Receive a message
response =ClientSocket.recv(4096)
```

## Output the message
```python
print(response.decode())
ClientSocket.close
```

Notice: we do some supposes,first ,every connection we're going to success, second, the server will wait for us before we send the message,third , the server always can response us immediately.

## Source Code

```python
import socket

targetHost="www.google.com"
targetPort=80


#Create the socket object
ClientSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#Establish connection to the tagetHost
ClientSocket.connect((targetHost,targetPort))

#Send a message
ClientSocket.send(b"GET /HTTP/1.1\r\nHost: google.com\r\n\r\n")

#Receive a message
response =ClientSocket.recv(4096)

print(response.decode())
ClientSocket.close
```

---

## UDP Client 

Source code 

```python
import socket

targetHost="meowhecker.com"
targetPort=80

#Create a socket object
clientSocket= socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

#send a message

clientSocket.sendto(b"meowhecker",(targetHost,targetPort))

#receive a message 
data, reHostPort = clientSocket.recvfrom(4096)

print(data.decode())
clientSocket.close()

```


## TCP Server 

The standard multi-threading TCP server 


Create socket object

```python
 #Create a socket object
    serverSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
```

## Listen on ......

```python
serverSocket.bind((ip,Port))
serverSocket.listen(5)
#Show the message
print(f'Listening on {ip} : {Port}')
```

Get clientSocket and ClientINFO

```python
clientSocket, clientINFO=serverSocket.accept()
        #Show the client messages 
        print(f'Accepted connection form {clientINFO[0]}:{clientINFO[1]}')
```

## Create Multi Threading

```python
#Create multithreading 
clientHandler = threading.Thread(target=clientJob, args=(clientSocket,))
#Start Multithreading 
clientHandler.start()
```

## Job 

```python
def clientJob(clientSocket):
        with clientSocket as Sock:
            request = Sock.recv(4096)
            decodeRequest = request.decode()
            print(f"Received: {decodeRequest}")
            Sock.send(b"ACK")
```


Source code 


```python
import socket
import threading

ip = "meowhecker.com" 
Port=6969


def main():
    #Create a socket object
    serverSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #listen on .....
    serverSocket.bind((ip,Port))
    serverSocket.listen(5)
    #Show the message
    print(f'Listening on {ip} : {Port}')


    #Establish Connections
    while 1:
        clientSocket, clientINFO=serverSocket.accept()
        #Show the client messages 
        print(f'Accepted connection form {clientINFO[0]}:{clientINFO[1]}')

        #Create multithreading 
        clientHandler = threading.Thread(target=clientJob, args=(clientSocket,))
        #Start Multithreading 
        clientHandler.start()

def clientJob(clientSocket):
        with clientSocket as Sock:
            request = Sock.recv(4096)
            decodeRequest = request.decode()
            print(f"Received: {decodeRequest}")
            Sock.send(b"ACK")
if __name__ == '__main__':
    main()

    #there are two ways to use it 
        # Directely use it 
        # import to another programe 
```

## Test: Server <----->Client
Server
![](https://i.imgur.com/6FvGvtd.png)

---

Client
![](https://i.imgur.com/NZTfYIs.png)

---









