UDP应用场景
#成语大师
#服务器端程序 MM05Server.py
import socket
QY={"语重心长":"成语解释 重:郑重。恳切话说得诚恳;有分量;心意深长。成语例子 他这些语重心长的话,深深地打劫了我的心。英语翻译 talk in earnest。",
"敬老爱幼":"成语解释 尊敬老人,爱护小孩。英语翻译 respect the aged and cherish the young。",
"百尺竿头":"解释:不满足于已有成就,继续努力,以取得更好的成绩。",
"愚公移山":"比喻坚持不懈地改造自然和坚定不移地进行。"}
host = socket.gethostname() # 获取主机地址
port = 12345 # 设置端口号
print('准备 网络连接 绑定。。。 ')
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建TCP/IP套接字
s.bind((host,port)) # 绑定地址(host,port)到套接字
s.listen(1) # 设置最多数量
sock,addr = s.accept() # 被动接受TCP客户端连接
print('连接已经建立')
info = sock.recv(1024).decode() # 接收客户端数据
while info != 'byebye': # 判断是否退出
key=info
if info :
print('接收到的内容:'+info)
print('华夏学院欢迎您! ')
try:
ss=QY[key]
send_data ="《成语大师》为你服务 \n "+ss # 发送消息
sock.send(send_data.encode()) # 发送TCP数据
except Exception as e:
print('\n',e)
send_data ="请谅!成语大师库没有存放此成语,请你为大师水平提升也出出力吧!\n " # 发送消息
sock.send(send_data.encode()) # 发送TCP数据
if send_data in ('byebye',"quit","exit"): # 如果发送exit,则退出
break
info = sock.recv(1024).decode() # 接收客户端数据
sock.close() # 关闭客户端套接字
s.close() # 关闭服务器端套接字
print('谢谢使用!欢迎你下次继续使用《成语大师》! ')
#客户端程序 MM05Client.py
import socket # 导入socket模块
s= socket.socket() # 创建TCP/IP套接字
host = socket.gethostname() # 获取主机地址
port = 12345 # 设置端口号
s.connect((host,port)) # 主动初始化TCP服务器连接
print('已连接 byebye--quit ')
print("《成语大师》 为你服务!\n")
print("输入成语(如:语重心长,百尺竿头,敬老爱幼),《成语大师》为你解惑。\n")
info = ''
while info != 'byebye': # 判断是否退出
send_data=input('输入发送的成语: ') # 输入内容
s.send(send_data.encode()) # 发送TCP数据
if send_data in ('byebye',"quit","exit"): # 判断是否退出
break
info = s.recv(1024).decode() # 接收服务器端数据
print('接收到的内容: \n '+info)
s.close() # 关闭套接字
应用场景
语音广播、视频、聊天软件、TFTP(简单文件传送)、SNMP(简单网络管理协议)、RIP(路由信息协议,如报告股票市场、航空信息)、DNS(域名解释)
(一)文件传输协议FTP应用
1. ftplib模块
在Python系统中默认安装的ftplib模块中定义了FTP类,应用ftplib模块中的FTP类,可以很方便地编写ftp客户端,用于上传或下载文件。
2. FTP类的常用方法

【例3】设在FTP服务器(IP为129.168.1.1,端口号为21)上有目录test,该目录下有文件hello.c。编写一个FTP客户端程序,将FTP服务器上的hello.c文件下载到客户机的pytest目录下。
编写程序代码如下:
from ftplib import FTP
ftp = FTP() # 创建FTP对象
timeout = 30 # 设定传输超时的时间
port = 21 # 端口号
ip = '192.168.1.1' # FTP服务器的IP地址
username = 'admin' # 登录用户名
passwd = '123456' # 用户密码
trFileName = 'hello.c' # 设置要传输的文件
ftp.connect(ip,port, timeout) # 连接FTP服务器
ftp.login(username, passwd) # 用户登录服务器
print(ftp.getwelcome()) # 获得欢迎信息
ftp.cwd('/test') # 设置FTP路径(FTP服务器)
ftp.dir() # 显示FTP路径目录下的文件
path = '/pytest/' + trFileName # 文件保存路径(客户机)
f = open(path,'wb') # 打开要保存文件
filename = 'RETR ' + trFileName # 保存FTP文件
ftp.retrbinary(filename, f.write) # 保存FTP上的文件
print(filename) # 显示从FTP服务器下载的文件
ftp.quit() # 退出FTP服务器
程序运行程序结果如下:
220 Welcome to Gxnn.com FTP Server!
-rwx------ 1 user group 251 Mar 13 13:28 hello.c
-rwx------ 1 user group 19521 Jul 24 22:23 hello.exe
-rwx------ 1 user group 4146 Jul 24 22:23 hello.o
RETR hello.c
(二)基于TCP协议的端口扫描器
【例4】编写一个简易的端口扫描器程序。
(三) 远程控制计算机
【例5】编写远程控制计算机操作的程序。
(四)网络域名解析
在Python中域名通常是一个字符串的形式。进行域名解析时,经常需要去掉字符串头尾的空格,这时,需要用到Python的strip()函数。
strip()函数的一般语法格式为:
str.strip([chars])
其中,chars为移除字符串头尾指定的字符。
例如:
str = "*****this is string example....wow!!!*****"
print (str.strip( '*' ))
则输出结果为:
this is string example....wow!!!
当参数chars为空格时,strip()要写成无参函数。
当域名写成“http://xxxxx.xxxx.xxxxx”形式时,则需要使用字符串运算符[:]去除“http://”。
【例6】设文本文件urllist.txt中存放网站域名如下:
编写一个域名解析程序,解析出对应的IP地址,并保存到文件iplist.txt中。

运行程序,其结果如下:
sdk.mobcent.com
103.235.239.10
www.baidu.com
119.75.216.20
complete !
此时,新生成的文件iplist.txt中,保存了解析的IP地址,其内容为:
103.235.239.10
119.75.216.20

