socket网络程序设计实验一(基于python3.7、PyQt5)
设计一个简单的通过域名查询IP地址的程序,
先放个运行效果图:
空输入时查询本机主机名和IP:
查询百度的ip
一、实验目的
- 掌握socket库的常用函数
- 掌握socket网络编程的基本流程框架
- 掌握PyQt5的基本用法
二、实验环境
- Windows10_x64操作系统
- python3.7.1
- PyQt5(设计界面)
- Py UIC(将PyQt的***.ui文件转化为***.py文件)
- Pyinstaller(打包成.exe程序,可选)
三、实验内容
(1)设计界面
打开PyQt5,没有安装的百度安装一下,配置一下环境即可。
新建一个Dialog Without Button吧,就是一个小窗口,里面啥都没有,我们自己摆
拖动左边的部件到右边,改一下text属性和layout布局,自己觉得好看就行我的是这样摆的:
设计完成后左上角文件,保存就OK了,你可以改名字,不改的话默认是untitled.ui,然后就可以关掉PyQt5.
(2)Py UIC
在Pycharm中找到我们刚才保存的untitled.ui文件,右击找到External tools -> Py UIC
我改了名queryHost
点一下,就会帮我们自动生成了一个同名的.py文件,然后我们打开它开始盘,哦不,开始写代码
(3)补充代码
光是Py UIC给我们自动生成的代码是运行不了的,生成的只是设置控件的布局属性等,我们需要在代码的最后加上这么一段:
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = Ui_Dialog()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
还用到了一些库,我们也需要自己导入:
import sys
import socket
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication
然后可以试运行一下了
运行就是这样了:
但是现在这个程序是没有任何功能的,点什么都没反应,接下来我们补充代码,实现程序的功能
我们在生成的类内定义两个方法,作为两个查询按钮的响应事件如下:
def click_ym(self):
ym = self.lineEdit.text() # 获取域名输入内容
if len(ym)==0: # 输入为空时返回本机信息
ym2 = socket.gethostname()
else:
ym2 =ym
try:
# info = socket.getaddrinfo(ym2, None) # 域名转IP地址
# ip = info[0][4][0]
ip = socket.gethostbyname(ym2)
except Exception as e:
print(e)
else:
self.lineEdit_2.setText(ip) # 显示信息
textView = '主机名:' + ym2 +'\nIP地址:' + ip + '\n作者:15计算机' \
'172班 03号 LiePy'
self.textBrowser.setText(textView) # 显示信息
self.lineEdit.setText(ym2) # 显示信息
def click_ip(self):
ip = self.lineEdit_2.text() # 获取IP输入内容
if len(ip)==0: # 输入为空时返回本机信息
ym = socket.gethostname()
ip = socket.gethostbyname(ym)
else:
try:
info = socket.gethostbyaddr(ip)
ym = info[0]
except Exception as e:
print(e)
self.lineEdit.setText(ym) # 显示信息
self.lineEdit_2.setText(ip) # 显示信息
textView = '主机名:' + ym +'\nIP地址:' + ip + '\n作者:15计算机' \
'172班 03号 LiePy'
self.textBrowser.setText(textView) # 显示信息
然后再在Py UIC给我们生成的代码中的retranslateUi方法最后添加上:
self.pushButton.clicked.connect(self.click_ym) # 设置按钮关联动作
self.pushButton_2.clicked.connect(self.click_ip) # 设置按钮关联动作
这样就完成了按钮相应事件的绑定
OK运行一下程序
输入为空时点查询:
localhost域名查询:
127.0.0.1IP查询:
www.google.com域名查询:
嗯,OK啦,但是最下面这两个按钮我没有赋予功能,只是个摆设,也可以在代码中删掉
我们在retranslateUi中找到这两个按钮的id:
这里看到是pushButton_3和pushButton_4
ctrl+f 查找所有的pushButton_3和pushButton_4删掉有关的代码就好了
如图:
下面有点空,我们可以重新在代码中调整窗口的尺寸,浏览一下代码,发现这行
这一定就是控制尺寸的了,359是宽,361是高,我们把高缩小一点,300吧,试一下效果:
阔以阔以。
(4)pyinstaller打包
打开pycharm的terminal终端,(没有的话pip install pyinstaller安装一下)输入pyinstaller -F -w ***.py(你的文件名),等待打包完成就可以了,最后的.exe程序在项目目录的dist文件夹里,一个沙雕的鸟的图标就是它!
打开也是可以的
那么这个有点ZZ的小程序就这样吧
pass~
代码已上传到我的github项目,链接:https://github.com/LiePy/socket_test.git