TCP与UDP套接字Python编程

一、套接字

套接字(socket)是同一台主机内应用层和运输层的接口。
在这里插入图片描述
进程可类比为一个房子,套接字为该进程的门,当一个进程想向另一台主机发送报文时,该进程把报文推出门(套接字),通过运输层的运输到另一台主机的目的进程,一旦报文到达目的主机,它通过接收进程的门(套接字)传递,接收进程开始处理报文。
可以看到,应用程序开发者在套接字应用层一侧可以控制所有,但是几乎无法控制运输层。

二、UDP编程

1、UDPServer

from socket import *
serverPort = 12000    #服务端的端口号
serverSocket = socket(AF_INET,SOCK_DGRAM)  #创建一个套接字
serverSocket.bind(('',serverPort))         #绑定地址(host,port)到套接字
print("The server is ready to receive")    #提示服务器准备就绪
while True: #死循环,True为布尔值,值为1
    message,clientAddress = serverSocket.recvfrom(2048) #接收UDP数据
    modifiedMessage = message.decode().upper() #解码,转换 upper()方法将字符串小写转换为大写
    serverSocket.sendto(modifiedMessage.encode(), clientAddress) #编码发送到客户端

2、UDPClient

from socket import *
serverName = '127.0.0.1'   #服务端的IP地址
serverPort = 12000            #服务端的端口号
clientSocket = socket(AF_INET,SOCK_DGRAM)  #创建一个套接字
message = input('Input lowercase sentence:')  #从键盘获取报文
clientSocket.sendto(message.encode(),(serverName,serverPort)) #字符串编码发送UDP数据到服务端
modifiedMessage,serverAddresss = clientSocket.recvfrom(2048) #接收UDP数据,返回值:(data,address)
print(modifiedMessage.decode()) #将数据解码并打印
clientSocket.close()  #关闭套接字

三、TCP编程

1、TCPServer

from socket import *
serverPort = 12000    #服务端的端口号
serverSocket = socket(AF_INET,SOCK_STREAM)  #创建一个套接字
serverSocket.bind(('',serverPort))         #绑定地址(host,port)到套接字
serverSocket.listen(1)  #请求连接的最大数
print("The server is ready to receive")    #提示服务器准备就绪
while True:
    connectSocket,addr = serverSocket.accept() #创建连接套接字
    Message = connectSocket.recv(1024).decode() #解码
    capitalizedMessage = Message.upper()     #转化
    connectSocket.send(capitalizedMessage.encode()) #编码发送
    connectSocket.close()  #关闭连接套接字

2、TCPClient

from socket import *
serverName = '127.0.0.1'   #服务端的IP地址
serverPort = 12000            #服务端的端口号
clientSocket = socket(AF_INET,SOCK_STREAM)  #创建一个套接字
clientSocket.connect((serverName,serverPort)) #建立TCP连接,进行三次握手
message = input('Input Message:')  #从键盘获取报文
clientSocket.send(message.encode()) #字符串转化为UTF-8编码,并发送TCP数据到服务端,不需要附加目的地址和端口
modifiedMessage = clientSocket.recv(1024)  #接收TCP数据,返回值:(data)
print('From Server:',modifiedMessage.decode())  #解码输出
clientSocket.close()  #关闭连接套接字
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值