tcp udp实践

前言

真的来写一个tcp udp试试

环境

  • python3.10[client]
  • Ubuntu-22.04(wsl)[client]

UDP样例

实现了一个发送字符串,接收大写字符串的udp客户端与服务端

客户端

1
2
3
4
5
6
7
8
9
from socket import *
serverName = '127.0.0.1'#目标host
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)#第一个参数为使用ipv4 第二个说明为udp
while True:
message = input('Input lowercase sentence:')
clientSocket.sendto(message.encode(),(serverName,serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print (modifiedMessage.decode())#从python3开始 socket传输需要bytes类型

服务端

1
2
3
4
5
6
7
8
9
10
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(('',serverPort))
print("The server is ready to receive")
while True:
message, clientAddress = serverSocket.recvfrom(2048)
print(message,clientAddress)
modifiedMessage = message.upper()
serverSocket.sendto(modifiedMessage, clientAddress)

TCP样例

tcp要求在传输数据前有三次握手,在python中体现为使用一个socket来进行握手,然后创建另一个socket继续传输

客户端

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

while True:
sentence = input("input lowercase sentence:")
clientSocket = socket(AF_INET,SOCK_STREAM) #还不理解close后会不会彻底删除那个对象,这里重新创建一遍
clientSocket.connect((serverName,serverPort))#与udp对比,这里出现了一次connect()
clientSocket.send(sentence.encode())
modifiedSentence = clientSocket.recv(1024)
print("From server",modifiedSentence.decode())
clientSocket.close()

服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort))
serverSocket.listen(1)#请求的最大连接数
print('The server is ready')
while True:
connectionSocket, addr = serverSocket.accept()#多出来个serversocket处理connect()带来的握手
print("connected with",addr)
sentence = connectionSocket.recv(1024)
modifiedSentence = sentence.upper()
connectionSocket.send(modifiedSentence)
connectionSocket.close()

套接字编程作业

Web服务器

udp ping

邮件客户

多线程web代理