调试运行下面网络应用程序
#调试下面程序,并在理解的基础上优化应用.
#【案例】整数网络传输 (1) 服务器程序
import socket
import struct
def readInt(socket):
size=struct.calcsize("@i")
data=socket.recv(size)
n=struct.unpack("@i",data)[0]
return n
def writeInt(socket,n):
data=struct.pack("@i",n)
socket.send(data)
try:
s = socket.socket()
host = socket.gethostname() #python通过socket模块获取本机主机名和IP地址
print('GZHX 本机主机名和IP地址: ',host,socket.gethostbyname(host) )
port = 2345
s.bind((host, port))
s.listen()
print(host,"服务器在监听...");
c= s.accept()[0]
print('客户端连接')
n=readInt(c)
print('客户端发来信息: ',n)
writeInt(c,n)
c.close()
s.close()
except Exception as e:
print(e)
#【案例】整数网络 传输(2) 客户端程序
import socket
import struct
def readInt(socket):
size=struct.calcsize("@i")
data=socket.recv(size)
n=struct.unpack("@i",data)[0]
return n
def writeInt(socket,n):
data=struct.pack("@i",n)
socket.send(data)
try:
a=input("输入整数")
a=int(a)
s = socket.socket()
host =socket.gethostname()
print('目标服务器名称:',host)
port = 2345
s.connect((host, port))
print("祝贺你! 连接服务器成功");
writeInt(s,a)
b=readInt(s)
print(b)
s.close()
except Exception as e:
print(e)

说明:
(1)若没有运行服务器端程序,将出现下面信息:
输入整数20220117
目标服务器名称: MS-20170419NIDS
[WinError 10061] 由于目标计算机积极拒绝,无法连接。
(2)先运行服务器端程序,服务器端出现信息:
GZHX 本机主机名和IP地址: MS-20170419NIDS 192.168.31.53
MS-20170419NIDS 服务器在监听...
再运行客户端程序,则连接成功,客户端出现信息:
输入整数 20220118
目标服务器名称: MS-20170419NIDS
祝贺你! 连接服务器成功
MS-20170419NIDS 接收到的信息是 20220118
>>>
服务器端信息:
GZHX 本机主机名和IP地址: MS-20170419NIDS 192.168.31.53
MS-20170419NIDS 服务器在监听...
客户端连接
客户端发来信息: 20220118
应用实例:HX06(名言分享与机器聊天)
# -*- coding:utf-8 -*-
# 服务器端程序 HX04(名言分享聊天)Server.py
import socket #导入socket模块
fs=["好好学习,天天向上!","厚德载物!","阅读使人充实,会谈使人敏捷,写作使人精确。","厚德、重能、敬业、善事!" ,"华夏多美丽!","信工学院欢迎您!"]
ms=["Hi,我是HX小信 !","这名言是毛主席的语录。","这名言是清华大学的校训。" ,"这是培根的名言,他是英国文艺复兴时期最重要的散作家、哲学家。"," 这是华夏学院的校训。欢迎你到华夏!","我爱信工学院,我想您也是的!"]
try:
s = socket.socket() #创建 socket 对象
host ='127.0.0.1' # host=socket.gethostname() #主机IP host = '127.0.0.1' ; 例209室内ip:192.168.209.22~~199 可在命令行方式,用 ipconfig /all 查动态ip
port =8080 #端口号 如:8080
s.bind((host, port))
s.listen(10) #设置最多连接数
print(host," 服务器在监听,等待客户端连接... \n")
k=0
while True: #开启永真循环
c= s.accept()[0] #建立客户端连接
d=c.recv(1024) #获取客户端请求数据
d=d.decode() #将接收的数据模式转换
t=c
print(t,type(t))
print('\n',t,'发来信息:\n ',d) #打印输出接受数据
d=ms[k]+"\n you say: "+d+" \n 您好! 很高兴与您聊聊,分享精彩名言:\n "+fs[k]
d=ms[k]+"\n 很高兴与你分享名言:\n "+fs[k]
k=k+1
d=d.encode()
c.send(d) # 向客户端发送数据
if k>=5:
yn=input(" quit ?(y/n)").lower()
if yn=='y':break
else: k=0
c.close()
s.close()
except Exception as e:
print('\n',e)
print("服务器工作结束! BYE- BYE! ")
s.close() #关闭链接
c.close()
# 客户端程序 HX06(名言分享聊天)Client.py
import socket # 导入socket模块
def sends():
s= socket.socket() # 创建TCP/IP套接字
host = '127.0.0.1' # 获取主机地址 例209室内ip:192.168.209.22~~199, 可在命令行方式,用 ipconfig /all 查动态ip
port = 8080 # 设置端口号
s.connect((host,port)) # 主动初始化TCP服务器连接
send_data = input("QQ:") # 提示用户输入数据
s.send(send_data.encode()) # 发送TCP数据
# 接收对方发送过来的数据,最大接收1024个字节
recvData = s.recv(1024).decode()
#print('接收到的回应信息:',recvData)
# 关闭套接字
s.close()
return recvData
k=0
while True:
datas=sends()
k=k+1
#print('第 '+str(k)+' 次,接收到的回应信息: \n',datas)
print('he/she say: \n',datas)
if k%5==0 :
yn=input(" quit ?(y/n)").lower()
if yn=='y':
print("工作结束! BYE- BYE! ")
break
else:
pass

