基于tcp协议的网络聊天室
更新时间:2023-09-30 18:27:01 阅读量: 综合文库 文档下载
青岛科技大学信息科学技术学院实验报告
---------------------------------------------------------------------------------------------------------------------- 班级: 软件113 姓名: 蒋栋 学号: 1108050328 成绩:
实验名称: 基于TCP的网络聊天室
1.实验目的:
掌握TCP通讯协议、掌握QTcpSocket 2.实验内容:
使用Qt的QtcpSocket实现简单的网络聊天程序,范例如图:
包括拂去其程序和客户端程序,服务端程序可以创建一个聊天室,客户端程序可以输入登陆的用户名、服务器地址以及使用的端口号,然后进入聊天室,聊天室中的每一位用户均可以看见发布的信息。 3.实验方法:
使用Qt的QtcpSocket,参考Qt网络编程实验。
4.实验过程 tcpServer端 代码:
#include \#include \
青岛科技大学信息科学技术学院实验报告
----------------------------------------------------------------------------------------------------------------------
Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) {
ui->setupUi(this);
ui->lineEdit->setText(\ port=8010; }
Dialog::~Dialog() {
delete ui; }
void Dialog::on_newchat_clicked() {
server=new Server(this,port);
connect(server,SIGNAL(updateServer(QString,int)),this,SLOT(updateServer(QString,int)));
ui->newchat->setEnabled(false); }
void Dialog::updateServer(QString msg,int length) {
ui->listWidget->addItem (msg.left(length) ); }
tcpServer端server.cpp 代码: #include \
#include
Server::Server(QObject*parent,int port) :QTcpServer(parent) {
listen(QHostAddress::Any,port); }
void Server::incomingConnection(int socketDescriptor) {
TcpclientSocket*tcpClientSocket=new TcpclientSocket(this);
connect(tcpClientSocket,SIGNAL(updateClient(QString,int)),this,SLOT(updateClient(QString,int)));
connect(tcpClientSocket,SIGNAL(disconnected(int)),this,SLOT(slotDisconnected(int)));
tcpClientSocket->setSocketDescriptor(socketDescriptor);
青岛科技大学信息科学技术学院实验报告
----------------------------------------------------------------------------------------------------------------------
tcpClientSocketList.append(tcpClientSocket); }
void Server::updateClient(QString msg, int length) {
emit updateServer(msg,length);
for(int i=0;i QTcpSocket*item=tcpClientSocketList.at(i); if(item->write(msg.toLatin1(),length)!=length) {continue ;}; } } void Server::slotDisconnected(int descriptor) { for(int i=0;i QTcpSocket*item=tcpClientSocketList.at(i); if(item->socketDescriptor()==descriptor) { tcpClientSocketList.removeAt(i); return; } } return; } Tcpclient端代码: #include \#include \#include Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); ui->lineEdit_4->setText(\ status=false; serverIP =new QHostAddress(); port = 8010; ui->pb_send->setEnabled(false); } 青岛科技大学信息科学技术学院实验报告 ---------------------------------------------------------------------------------------------------------------------- Dialog::~Dialog() { delete ui; } void Dialog::on_pb_send_clicked() { slotSend(); } void Dialog::on_pb_enter_clicked() { slotEnter(); } void Dialog::slotEnter() { if(!status) { QString ip=ui->lineEdit_3->text(); if(!serverIP->setAddress(ip)) { QMessageBox::information(this,tr(\ip address error!\ return; } if(ui->LineEditUser->text()==\ { QMessageBox::information(this,tr(\ return ; } userName=ui->LineEditUser->text(); tcpSocket = new QTcpSocket(this); connect(tcpSocket,SIGNAL(connected()),this,SLOT(slotConnected())); connect(tcpSocket,SIGNAL(disconnected()),this,SLOT(slotDisconnected())); connect(tcpSocket, SIGNAL(readyRead()),this, SLOT(dataReceived())); tcpSocket->connectToHost ( *serverIP, port); status=true; } else 青岛科技大学信息科学技术学院实验报告 ---------------------------------------------------------------------------------------------------------------------- { int length = 0; QString msg=userName+tr(\ if((length=tcpSocket->write(msg.toLatin1(),msg.length()))!=msg.length()) { return ; } tcpSocket->disconnectFromHost(); status=false; } } void Dialog::slotConnected() { int length = 0; ui->pb_send->setEnabled( true ); ui->pb_enter->setText(tr(\ QString msg=userName+tr(\ if((length=tcpSocket->write(msg.toLatin1(),msg.length()))!=msg.length()) { return; } } void Dialog::slotDisconnected() { ui->pb_send->setEnabled( false ); ui->pb_enter->setText(tr(\} void Dialog::slotSend() { if(ui->LineEditSend->text()==\ { return ; } QString msg=userName+\ tcpSocket->write(msg.toLatin1(),msg.length()); ui->LineEditSend->clear(); } 青岛科技大学信息科学技术学院实验报告 ---------------------------------------------------------------------------------------------------------------------- void Dialog::dataReceived() { while (tcpSocket->bytesAvailable()>0) { QByteArray datagram; datagram.resize(tcpSocket->bytesAvailable()); tcpSocket->read(datagram.data(), datagram.size()); QString msg=datagram.data(); ui->listWidget->addItem (msg.left(datagram.size())); } } 5.实验结果 客户端1 服务器端 客户端2 6.实验总结 经过本次实验练习了TCP通讯协议、QTcpSocket 的使用。基本掌握了它们的使用。服务端程序可以创建一个聊天室,客户端程序可以输入登陆的用户名、服务器地址以及使用的端口号,然后进入聊天室,聊天室中的每一位用户均可以看见发布的信息。本次实验测试环境为本机。首先要给本机设置 ip地址。另外程序中要注意端口的赋值。 7.教师评语
正在阅读:
基于tcp协议的网络聊天室09-30
初中班主任研修日志4篇02-21
2017 - 2018学年高中政治第一单元公民的政治生活第一课生活在人民当家作主的国家教学案新人教版必修211-11
住建局团委年终总结述职报告09-07
Labview基于Modbus通信08-11
医学免疫学与微生物学作业答案 在线03-09
小学生期末评语大全(整理版)05-21
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 聊天室
- 基于
- 协议
- 网络
- tcp
- 行政组织学
- 全国计算机2015年9月四级网络工程师选择题试题 4
- 土木工程材料第二版(湖南大学、天津大学、同济大学、东南大学 - 合编)课后习题答案
- 新视野大学英语读写教程(第三版) Book 2-unit 5-课文原文
- 机械设计复习题分析
- 中国文化概论模拟试卷和答案
- 天财商龙餐饮系统用户手册1
- 石墨电极编程作业
- 中国历史100位皇帝,你一定要知道哦 - 图文
- 2012年及2011年自考电子商务数据库数据库真题及复习题
- 2014年9月份考试机械原理第三次作业
- 救命的偏方 - 豇豆根,治慢性肾炎
- 马克思主义基本原理概论选择题题库(便于打印版)
- 2018人教版六年级下数学配套练习册答案(1)
- 江苏省港口简介
- 关于加强医疗机构校验管理工作的通知
- 五管要害部位检查标准(部位分项)
- 教师工作坊研修方案
- 实验报告6:注射液制备
- 25.附件阮泽鸿广东省城乡结合部学龄儿童心理弹性与应对方式调查 - 图文