UDP

UDP Client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from socket import *
serverName = 'hostname'
serverPort = 12000

# AF_INET: 寻址接受 IPv4 地址或主机名与端口
# SOCK_DGRAM:UDP socket,传输 datagram
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = input('Input lowercase sentence:')

# 这里会自动把客户端进程的地址与端口发送过去
clientSocket.sendto(message.encode(),(serverName, serverPort))

# buffer size: 2048
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage.decode())
clientSocket.close()

UDP server

1
2
3
4
5
6
7
8
9
10
11
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)

# 把 12000 端口分配给服务器 socket
serverSocket.bind(('', serverPort))
print("The server is ready to receive")
while True:
message, clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.decode().upper()
serverSocket.sendto(modifiedMessage.encode(), clientAddress)

TCP

TCP Client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from socket import *
serverName = 'servername'
serverPort = 12000

# SOCK_STREAM:TCP socket,传输 byte stream
clientSocket = socket(AF_INET, SOCK_STREAM)

# 先 three-way handshake 建立 TCP 连接
clientSocket.connect((serverName,serverPort))
sentence = input('Input lowercase sentence:')
clientSocket.send(sentence.encode())
modifiedSentence = clientSocket.recv(2048)
print('From Server: ', modifiedSentence.decode())
clientSocket.close()

TCP Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort))

# serverSocket 是 welcoming socket,相当于接线员,监听连接请求
# backlog 参数代表该 socket 的等待队列大小为 1
serverSocket.listen(1)
print('The server is ready to receive')

while True:
# 握手完成后返回 connectionSocket,相当于接线员为此连接开通了一条专门的通话线路
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(2048).decode()
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence.encode())
connectionSocket.close()