栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

一个简单的UDP和TCP套接字编程例子(python实现)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一个简单的UDP和TCP套接字编程例子(python实现)

参考《计算机网络:自顶向下方法》
由客户端发送一串小写英文的字符串给服务端,服务端将其转为大写英文并发送回给客户端

UDP套接字编程

UDPClient.py

from socket import *

serverName = '172.31.59.5'  # 服务端ip
serverPort = 12000  # 服务端端口号
clientSocket = socket(AF_INET, SOCK_DGRAM)  # 创建客户的套接字  AF_INET表示使用ipv4,SOCK_DGRAM表示是一个udp套接字
message = input('Input lowercase sentence:')  # 获取用户输入的字符串
# encode将字符串转字节,sendto为报文附上目的地址(serverName, serverPort)并向进程的套接字clientSocket发送结果分组
clientSocket.sendto(message.encode(), (serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)  # 接收到的分组的数据放入modifiedMessage,源地址放入serverAddress
print(modifiedMessage.decode())  # 将报文从字节转为字符串,打印出来
clientSocket.close()  # 关闭套接字,关闭进程

UDPServer.py

from socket import *

serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))  # 将端口号12000与该服务器的套接字绑定在一起
print("the server is ready to receive")
while True:
    message, clientAddress = serverSocket.recvfrom(2048)
    modifiedMessage = message.decode().upper()  # 将报文转为字符串后,获取客户发送的行并将其转化为大写
    serverSocket.sendto(modifiedMessage, clientAddress)  # 将客户的地址附到大写的报文上,并将所得得分组发送到服务器的套接字中

运行结果:
服务端

客户端:

TCP套接字编程

TCPClient.py

from socket import *

serverName = '172.31.59.5'  # 服务端ip
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)  # 创建客户的套借字,AF_INET表明底层网络使用ipv4,SOCK_STREAM表明是一个tcp套接字
clientSocket.connect((serverName, serverPort))  # 发送数据前要执行三次握手,并在客户和服务器之间创建一个tcp连接
sentence = input('input lowercase sentence:')  # 获取用户输入的字符串
clientSocket.send(sentence.encode())  # 将字符串中的字节放到tcp连接中去(这里和udp不同,不需要显式创建分组并为分组附上目的地址)
modifiedSentence = clientSocket.recv(1024)  # 字符到达服务器被放置在字符串中一直积累,直到该行以回车符结束为止
print("from server:", modifiedSentence.decode())
clientSocket.close()  # 关闭套接字,因此关闭了客户和服务器之间的tcp连接,引起客户中的tcp向服务器中的tcp发送一条tcp报文

TCPServer.py

from socket import *

serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', serverPort))  # 将服务器的端口号与该套接字关联起来
serverSocket.listen(1)  # serverSocket是欢迎套接字,等待并聆听客户的tcp连接请求,参数定义了请求连接的最大数
print("the server is ready to receive")
while True:
    # 在服务器中创建一个新套接字connectionSocket,客户和服务器则完成了握手,clientSocket和serverSocket之间创建了一个tcp连接
    connectionSocket, addr = serverSocket.accept()
    sentence = connectionSocket.recv(1024).decode()
    capitalizedSentence = sentence.upper()
    connectionSocket.send(capitalizedSentence.encode())
    connectionSocket.close()  # 关闭了连接套接字,但serverSocket保持打开,所以另一个客户此时能够敲门

运行结果:
服务端:

客户端:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876020.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号