天津理工大学 计算机网络实验二
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7页 共9页
}
/****************************************************************************** * Send data * ***************************************************************************/ void MainWindow::sendMessage() { QString textEdit = ui->lineEdit->text(); QString strData =QString::fromLocal8Bit("Time: ") + QTime::currentTime().toString() + "\n" + textEdit.toLocal8Bit() + "\n"; QByteArray sendMessage = strData.toLocal8Bit(); mChat += ("Send " + sendMessage); ui->textEdit->setText(mChat); tcpSocket->write(sendMessage); ui->lineEdit->clear(); } /****************************************************************************** * Receive data * ***************************************************************************/ void MainWindow::onReciveData() { QString data = tcpSocket->readAll(); qDebug()<<data; mChat +=("Recv " + data); ui->textEdit->setText(mChat); } /****************************************************************************** * Create new listen * ***************************************************************************/ void MainWindow::newListen() { if(!tcpServer->listen(QHostAddress::Any,6666)) { qDebug()<<tcpServer->errorString(); tcpServer->close(); } } /****************************************************************************** * Accept connection
/****************************************************************************** * Init * ***************************************************************************/ void MainWindow::init() { // timer = new QTimer; tcpServer = new QTcpServer; tcpSocket = new QTcpSocket; newListen(); connect(tcpServer,SIGNAL(newConnection()),SLOT(acceptConnection())); connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),SLOT(showError(QAbstractSocket::SocketError)));
1) 掌握网络应用程序的开发方法; 2) 掌握 Client/ Server 结构软件的设计与开发方法 3) 掌握 Socket 机制的工作原理
2. 实验环境 Linux Mint 18.1 64bit with kernel Linux 4.4.0 Qt/C++ 5.8.1
3. 实验要求 请在以下题目中选择一个,按照要求完成实验,并完成实验报告。实验可以分组进行,每 2 人一组,在 报告中注明每个成员的分工。编程可以使用任何高级语言,建议使用 java 或 C++。 4. 实验过程记录(源程序、测试用例、测试结果及心得体会等) SOCKET 编程实现聊天程序 程序截图
第3页 共9页
public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void init(); void newTcpConnect(); private: Ui::MainWindow *ui; QTcpSocket *tcpSocket; QByteArray mChat; private slots: void onReciveData(); void onSendMessage(); void onShowError(QAbstractSocket::SocketError); }; #endif // MAINWINDOW_H mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); setWindowTitle(QString::fromLocal8Bit("客户端")); init(); connect(ui->sendBtn,SIGNAL(clicked(bool)),SLOT(onSendMessage())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::init() { tcpSocket = new QTcpSocket;
第1页 共9页
程序界面-服务端
程序界面-客户端 状态图
第2页 共9页
示例代码: 客户端: mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QMainWindow> #include <QtNetwork> #include <QTcpServer> #include <QTcpSocket> #include <QTimer> #include <QAbstractSocket> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT
第4页 共9页
newTcpConnect(); connect(tcpSocket,SIGNAL(readyRead()),SLOT(onReciveData())); } void MainWindow::newTcpConnect() { tcpSocket->abort(); tcpSocket->connectToHost("127.0.0.1",6666); } void MainWindow::onReciveData() { QString data = tcpSocket->readAll(); qDebug()<<data; mChat += ("Recv " + data); ui->textEdit->setText(mChat); } void MainWindow::onSendMessage() { QString textEdit = ui->lineEdit->text(); QString strData =QString::fromLocal8Bit("Time: ") + QTime::currentTime().toString() + "\n" + textEdit.toLocal8Bit() +"\n"; QByteArray sendMessage = strData.toLocal8Bit(); mChat+= ("Send " + sendMessage); ui->textEdit->setText(mChat); tcpSocket->write(sendMessage); } void MainWindow::onShowError(QAbstractSocket::SocketError) { qDebug()<<tcpSocket->errorString(); tcpSocket->close(); } main.c #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show();
// 发送消息
void onReciveData(); // 接收数据 void newListen(); // 建立 tcp 监听事件 void acceptConnection(); // 接收客户端连接 void showError(QAbstractSocket::SocketError); // 错误输出 };
实验报告
学院(系)名称:计算机与通信工程学院 姓名 班级 卢洪利 4班 课程名称 学号 实验名称 20146049 专业 计算机科学与技术
基于 TCP/UDP 的 Socket 编程 计算机网络 课程代码 0662016
实验时间
2017 年 4 月
日
实验地点
7#
批改意见
成绩
教师签字:
1. 实验目的 了解套接字(socket)实现原理。通过编成理解 TCP、UDP 原理,加深对传输层的功能理解。
第5页 共9页
return a.exec(); } 服务端: mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QMainWindow> #include <QtNetwork> #include <QTcpServer> #include <QTcpSocket> #include <QTimer> #include <QByteArray> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void init(); private: Ui::MainWindow *ui; QTcpSocket *tcpSocket; QTcpServer *tcpServer; QByteArray mChat; private slots: void sendMessage();
第6页 共9页
#endif // MAINWINDOW_H mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QObject> #include <QString> #include <QTextEdit> #include <QHostAddress> #include <QByteArray> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); init(); setWindowTitle("服务端"); connect(ui->sendBtn,SIGNAL(clicked(bool)),SLOT(sendMessage())); } MainWindow::~MainWindow() { delete ui; }
}
/****************************************************************************** * Send data * ***************************************************************************/ void MainWindow::sendMessage() { QString textEdit = ui->lineEdit->text(); QString strData =QString::fromLocal8Bit("Time: ") + QTime::currentTime().toString() + "\n" + textEdit.toLocal8Bit() + "\n"; QByteArray sendMessage = strData.toLocal8Bit(); mChat += ("Send " + sendMessage); ui->textEdit->setText(mChat); tcpSocket->write(sendMessage); ui->lineEdit->clear(); } /****************************************************************************** * Receive data * ***************************************************************************/ void MainWindow::onReciveData() { QString data = tcpSocket->readAll(); qDebug()<<data; mChat +=("Recv " + data); ui->textEdit->setText(mChat); } /****************************************************************************** * Create new listen * ***************************************************************************/ void MainWindow::newListen() { if(!tcpServer->listen(QHostAddress::Any,6666)) { qDebug()<<tcpServer->errorString(); tcpServer->close(); } } /****************************************************************************** * Accept connection
/****************************************************************************** * Init * ***************************************************************************/ void MainWindow::init() { // timer = new QTimer; tcpServer = new QTcpServer; tcpSocket = new QTcpSocket; newListen(); connect(tcpServer,SIGNAL(newConnection()),SLOT(acceptConnection())); connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),SLOT(showError(QAbstractSocket::SocketError)));
1) 掌握网络应用程序的开发方法; 2) 掌握 Client/ Server 结构软件的设计与开发方法 3) 掌握 Socket 机制的工作原理
2. 实验环境 Linux Mint 18.1 64bit with kernel Linux 4.4.0 Qt/C++ 5.8.1
3. 实验要求 请在以下题目中选择一个,按照要求完成实验,并完成实验报告。实验可以分组进行,每 2 人一组,在 报告中注明每个成员的分工。编程可以使用任何高级语言,建议使用 java 或 C++。 4. 实验过程记录(源程序、测试用例、测试结果及心得体会等) SOCKET 编程实现聊天程序 程序截图
第3页 共9页
public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void init(); void newTcpConnect(); private: Ui::MainWindow *ui; QTcpSocket *tcpSocket; QByteArray mChat; private slots: void onReciveData(); void onSendMessage(); void onShowError(QAbstractSocket::SocketError); }; #endif // MAINWINDOW_H mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); setWindowTitle(QString::fromLocal8Bit("客户端")); init(); connect(ui->sendBtn,SIGNAL(clicked(bool)),SLOT(onSendMessage())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::init() { tcpSocket = new QTcpSocket;
第1页 共9页
程序界面-服务端
程序界面-客户端 状态图
第2页 共9页
示例代码: 客户端: mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QMainWindow> #include <QtNetwork> #include <QTcpServer> #include <QTcpSocket> #include <QTimer> #include <QAbstractSocket> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT
第4页 共9页
newTcpConnect(); connect(tcpSocket,SIGNAL(readyRead()),SLOT(onReciveData())); } void MainWindow::newTcpConnect() { tcpSocket->abort(); tcpSocket->connectToHost("127.0.0.1",6666); } void MainWindow::onReciveData() { QString data = tcpSocket->readAll(); qDebug()<<data; mChat += ("Recv " + data); ui->textEdit->setText(mChat); } void MainWindow::onSendMessage() { QString textEdit = ui->lineEdit->text(); QString strData =QString::fromLocal8Bit("Time: ") + QTime::currentTime().toString() + "\n" + textEdit.toLocal8Bit() +"\n"; QByteArray sendMessage = strData.toLocal8Bit(); mChat+= ("Send " + sendMessage); ui->textEdit->setText(mChat); tcpSocket->write(sendMessage); } void MainWindow::onShowError(QAbstractSocket::SocketError) { qDebug()<<tcpSocket->errorString(); tcpSocket->close(); } main.c #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show();
// 发送消息
void onReciveData(); // 接收数据 void newListen(); // 建立 tcp 监听事件 void acceptConnection(); // 接收客户端连接 void showError(QAbstractSocket::SocketError); // 错误输出 };
实验报告
学院(系)名称:计算机与通信工程学院 姓名 班级 卢洪利 4班 课程名称 学号 实验名称 20146049 专业 计算机科学与技术
基于 TCP/UDP 的 Socket 编程 计算机网络 课程代码 0662016
实验时间
2017 年 4 月
日
实验地点
7#
批改意见
成绩
教师签字:
1. 实验目的 了解套接字(socket)实现原理。通过编成理解 TCP、UDP 原理,加深对传输层的功能理解。
第5页 共9页
return a.exec(); } 服务端: mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QMainWindow> #include <QtNetwork> #include <QTcpServer> #include <QTcpSocket> #include <QTimer> #include <QByteArray> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void init(); private: Ui::MainWindow *ui; QTcpSocket *tcpSocket; QTcpServer *tcpServer; QByteArray mChat; private slots: void sendMessage();
第6页 共9页
#endif // MAINWINDOW_H mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QObject> #include <QString> #include <QTextEdit> #include <QHostAddress> #include <QByteArray> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); init(); setWindowTitle("服务端"); connect(ui->sendBtn,SIGNAL(clicked(bool)),SLOT(sendMessage())); } MainWindow::~MainWindow() { delete ui; }