中职省级示范校建设网站,手机端首页设计,郑州河北建设工程信息网站,网站的优化之前实现了Java版本的TCP和UDP套接字编程的例子#xff0c;于是决定结合Python的学习做一个Python版本的套接字编程实验。
流程如下#xff1a;
1.一台客户机从其标准输入#xff08;键盘#xff09;读入一行字符#xff0c;并通过其套接字将该行发送到服务器。
2.服务…之前实现了Java版本的TCP和UDP套接字编程的例子于是决定结合Python的学习做一个Python版本的套接字编程实验。
流程如下
1.一台客户机从其标准输入键盘读入一行字符并通过其套接字将该行发送到服务器。
2.服务器从其连接套接字读取一行字符。
3.服务器将该行字符转换成大写。
4.服务器将修改后的字符串行通过连接套接字再发回给客户机。
5.客户机从其套接字中读取修改后的行然后将该行在其标准输出监视器上打印出来。 【TCP】服务器端代码
import socket
import time
import threadings socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建socket (AF_INET:IPv4, AF_INET6:IPv6) (SOCK_STREAM:面向流的TCP协议)s.bind((127.0.0.1, 10021)) #绑定本机IP和任意端口(1024)s.listen(1) #监听等待连接的最大数目为1print(Server is running...) def TCP(sock, addr): #TCP服务器端处理逻辑print(Accept new connection from %s:%s. %addr) #接受新的连接请求while True:data sock.recv(1024) #接受其数据time.sleep(1) #延迟if not data or data.decode() quit: #如果数据为空或者quit则退出breaksock.send(data.decode(utf-8).upper().encode()) #发送变成大写后的数据,需先解码,再按utf-8编码, encode()其实就是encode(utf-8)sock.close() #关闭连接print(Connection from %s:%s closed. %addr) while True:sock, addr s.accept() #接收一个新连接TCP(sock, addr) #处理连接
【TCP】客户端代码
import sockets socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建一个sockets.connect((127.0.0.1, 10021)) #建立连接while True: #接受多次数据data input(请输入要发送的数据) #接收数据if data quit: #如果为quit,则退出breaks.send(data.encode()) #发送编码后的数据print(s.recv(1024).decode(utf-8)) #打印接收到的大写数据s.send(bquit) #放弃连接s.close() #关闭socket
运行结果 UDP协议则不需要事先建立连接直接互相发送数据即可。
【UDP】服务器端代码
import sockets socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #创建一个socket,SOCK_DGRAM表示UDPs.bind((127.0.0.1, 10021)) #绑定IP地址及端口print(Bound UDP on 10021...)while True: data, addr s.recvfrom(1024) #获得数据和客户端的地址与端口,一次最大接收1024字节print(Received from %s:%s. % addr)s.sendto(data.decode(utf-8).upper().encode(), addr)#将数据变成大写送回客户端#不关闭socket 【UDP】客户端代码
import sockets socket.socket(socket.AF_INET, socket.SOCK_DGRAM) addr (127.0.0.1, 10021) #服务器端地址while True:data input(请输入要处理的数据:) #获得数据if not data or data quit:breaks.sendto(data.encode(), addr) #发送到服务端recvdata, addr s.recvfrom(1024) #接收服务器端发来的数据print(recvdata.decode(utf-8)) #解码打印s.close() #关闭socket 运行结果