一个简单的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保持打开,所以另一个客户此时能够敲门

运行结果:
服务端:
在这里插入图片描述
客户端:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值