版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.6项目开发1.功能需求利用Socket编写一个聊天程序,客户端聊天界面如图7-8所示。单击“发送”按钮可以发送消息,并显示到界面中;单击“设置”可以改变用户名。2.项目设计项目的界面设计如图7-8所示。项目的类图如图7-9所示。3.项目实现同理是否补充项目设计同理是否补充项目设计服务器端主要代码如下(server.py):1#server.py2importsocket3importthreading45classChatServer:6definit(self):7self.clients={}8self.server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)9self.server.bind(('',12345))1010self.server.listen(5)11print("PyQt聊天服务器已启动")13defhandle_client(self,client_socket,addr):14username=client_socket.recv(1024).decode('utf-8')15self.clients[username]=client_socket16self.broadcast(f"{username}加入了聊天室",None)18whileTrue:20msg=client_socket.recv(1024).decode('utf-8')21ifmsg.startswith("!rename"):22new_name=msg.split()[1]23self.clients[new_name]=self.clients.pop(username)24username=new_name25elifmsg=="!quit":26self.remove_client(username)27break28else:29self.broadcast(f"{username}:{msg}",client_socket)30except:31self.remove_client(username)32break3334defbroadcast(self,message,sender):35forname,sockinself.clients.items():36ifsock!=sender:37try:38sock.send(message.encode('utf-8'))39except:40self.remove_client(name)4142defremove_client(self,username):43ifusernameinself.clients:44sock=self.clients.pop(username)45sock.close()46self.broadcast(f"{username}离开了聊天室",None)4748defrun(self):49whileTrue:50client_sock,addr=self.server.accept()51threading.Thread(target=self.handle_client,args=(client_sock,addr)).start()5253if__name__=="__main__":54server=ChatServer()55server.run()56客户端主要代码如下(client.py):1#client.py2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,3QTextEdit,QLineEdit,QPushButton,QLabel,QHBoxLayout)4fromPyQt5.QtCoreimportQt,pyqtSignal,QObject5importsocket6importthreading78classCommunicate(QObject):9new_message=pyqtSignal(str)11classChatClient(QMainWindow):12definit(self):13super().init()14self.username="Default"15self.init_ui()16self.setup_network()18definit_ui(self):19#主窗口设置20self.setWindowTitle("聊天程序客户端")21self.setFixedSize(400,500)22self.setStyleSheet("background-color:#f0f0f0;")2324#中央部件25central_widget=QWidget()26self.setCentralWidget(central_widget)27layout=QVBoxLayout(central_widget)2829#聊天显示区域30self.chat_display=QTextEdit()31self.chat_display.setReadOnly(True)32self.chat_display.setStyleSheet("""33QTextEdit{34background-color:white;35border:1pxsolid#ccc;36padding:5px;37}38""")39self.chat_display.append("Default:大家好")40layout.addWidget(self.chat_display)414142#输入区域43input_layout=QHBoxLayout()44self.message_input=QLineEdit()45self.message_input.setPlaceholderText("输入消息...")46self.message_input.returnPressed.connect(self.send_message)47input_layout.addWidget(self.message_input)4849self.send_btn=QPushButton("发送")50self.send_btn.clicked.connect(self.send_message)51input_layout.addWidget(self.send_btn)52layout.addLayout(input_layout)5354#底部信息栏55bottom_layout=QHBoxLayout()56self.username_label=QLabel(f"用户名:{self.username}")57bottom_layout.addWidget(self.username_label)5859bottom_layout.addStretch()6061self.settings_btn=QPushButton("设置")62self.settings_btn.clicked.connect(self.change_username)63bottom_layout.addWidget(self.settings_btn)64layout.addLayout(bottom_layout)6566#信号连接67m=Communicate()68m.new_message.connect(self.display_message)6970defsetup_network(self):71self.client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)72self.client_socket.connect(('localhost',12345))73self.client_socket.send(self.username.encode('utf-8'))7475#启动接收线程76self.receive_thread=threading.Thread(target=self.receive_messages,daemon=True)77self.receive_thread.start()7879defsend_message(self):80message=self.message_input.text().strip()81ifmessage:82self.client_socket.send(message.encode('utf-8'))83self.message_input.clear()8585defreceive_messages(self):86whileTrue:87try:88message=self.client_socket.recv(1024).decode('utf-8')89m.new_message.emit(message)90except:91break9293defdisplay_message(self,message):94self.chat_display.append(message)9596defchange_username(self):97fromPyQt5.QtWidgetsimportQInputDialog98new_name,ok=QInputDialog.getText(99self,'设置用户名','输入新用户名:',text=self.username)100ifokandnew_nameandnew_name!=self.username:101old_name=self.username102self.username=new_name103self.username_label.setText(f"用户名:{new_name}")104self.client_socket.send(f"!rename{new_name}".encode('utf-8'))105self.display_message(f"系统:用户名已从{old_name}改为{new_name}")107defcloseEvent(self,event):108self.client_socket.send("!quit".encode('utf-8'))109self.client_socket.close()110event.accept()112if__name__=="__main__":113app=QApplication([])114client=ChatClient()115client.show()116app.exec_()1.功能需求利用ftplib模块编写一个FTP客户端程序,实现FTP服务器的登录、文件的上传、下载,界面如图7-10所示。2.项目设计项目类的设计如图7-11所示。3.项目实现本程序使用PyQT进行界面设计,程序主要代码如下:1#1#-*-coding:utf-8-*-2fromPyQt5importQtCore,QtGui,QtWidgets33importsys4importos5fromftplibimportFTP67classUi_Form(object):8defsetupUi(self,MainWindow):12self.pushButton.clicked.connect(self.ftp_connect)#连接按钮13self.pushButton_2.clicked.connect(self.ftp_disconnect)#断开按钮14self.pushButton_3.clicked.connect(self.download)#下载按钮15self.pushButton_4.clicked.connect(self.upload)#上传按钮20deflocalfilelist(self):#本地文件列表21localfile=os.listdir('g:/04')#获取本地文件列表22forLocalinlocalfile:23self.listView_2.addItem(Local)#将文件加入列表框中2425defftp_connect(self):#FTP连接26host=self.lineEdit_ip.text()#获取输入主机名27port=int(self.lineEdit_port.text())#获取输入的端口28username=self.lineEdit_username.text()#获取输入用户名29password=self.lineEdit_password.text()#获取输入密码30self.ftp=FTP()31self.ftp.connect(host,21)#连接FTP服务器32self.ftp.login(username,password)#登录33self.label_state.setText('服务器已连接')34filelist=self.ftp.nlst()#取得服务器文件列表35self.dir=self.ftp.pwd()36forLocalinfilelist:37self.listView.addItem(Local)38
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年秋季开学高中军训体能恢复指导课件
- 2026年秋季开学初中军训一日生活制度课件
- 2026年秋季开学大学跑步行进与立定课件
- AI4Science在科学发现中的应用进展与范式转变研究
- 企业盈利能力评估中的典型偏差识别与纠正策略探讨
- 供应链韧性危机实践应对策略
- 金融业数字化转型中的关键技术赋能路径与实践框架
- 零售企业盈利能力动态监测指标体系构建
- 2026年智能纺织品通信技术应用研究
- 2026 年实习护士静脉治疗实操带教课件
- 2025至2030中国工业磁控管行业市场深度研究与战略咨询分析报告
- 2026年湖南生物机电职业技术学院单招职业技能测试题库附答案
- 三方协议包车合同范本
- DB65∕T 4747-2024 地表水自压滴灌工程设计规范
- 2025党章党规党纪应知应会知识测试题库(附完整答案)
- 安防监控巡检服务报告
- 牙关紧闭抽搐的急救护理措施
- 肿瘤多学科讨论(MDT)诊疗模式
- CJ/T 511-2017铸铁检查井盖
- 质量受权人管理制度
- 酒店客房部服务标准操作流程手册
评论
0/150
提交评论