socket网络程序设计实验一,通过域名查询IP/gethostbyname(基于python3.7、PyQt5)

socket网络程序设计实验一(基于python3.7、PyQt5)

设计一个简单的通过域名查询IP地址的程序,
先放个运行效果图:
空输入时查询本机主机名和IP:
运行效果1
查询百度的ip
运行效果2

一、实验目的

  • 掌握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
UIC
点一下,就会帮我们自动生成了一个同名的.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

然后可以试运行一下了

运行就是这样了:
运行1
但是现在这个程序是没有任何功能的,点什么都没反应,接下来我们补充代码,实现程序的功能
我们在生成的类内定义两个方法,作为两个查询按钮的响应事件如下:

    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运行一下程序

输入为空时点查询:
运行1
localhost域名查询:
运行2
127.0.0.1IP查询:
运行3
www.google.com域名查询:
运行4
嗯,OK啦,但是最下面这两个按钮我没有赋予功能,只是个摆设,也可以在代码中删掉

我们在retranslateUi中找到这两个按钮的id:

id
这里看到是pushButton_3和pushButton_4
ctrl+f 查找所有的pushButton_3和pushButton_4删掉有关的代码就好了
如图:
运行6
下面有点空,我们可以重新在代码中调整窗口的尺寸,浏览一下代码,发现这行
在这里插入图片描述
这一定就是控制尺寸的了,359是宽,361是高,我们把高缩小一点,300吧,试一下效果:
运行7
阔以阔以。

(4)pyinstaller打包

打开pycharm的terminal终端,(没有的话pip install pyinstaller安装一下)输入pyinstaller -F -w ***.py(你的文件名),等待打包完成就可以了,最后的.exe程序在项目目录的dist文件夹里,一个沙雕的鸟的图标就是它!
运行9
打开也是可以的
运行8

那么这个有点ZZ的小程序就这样吧
pass~
代码已上传到我的github项目,链接:https://github.com/LiePy/socket_test.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值