本项目为本科课程作业,仅供参考学习,有问题或建议欢迎与作者交流
文章目录
前言
TCP连接:Socket套接字基础知识
TCP(Transmission Control Protocol 传输控制协议)把连接作为最基本的抽象。TCP的许多特性都与TCP是面向连接的这个基本特征有关。因此我们对TCP连接需要有更清楚的了解。
每一条TCP连接有两个端点。
那么TCP连接的端点是什么呢?
一、TCP连接的端点
TCP连接的端点不是主机的IP地址,不是应用进程,也不是运输层的协议端口。
TCP实现两个终端的通信,故除了需要获取目标主机的IP地址外,还需要目标主机的对应应用进程端口号Port,
所以TCP连接的端点叫做套接字(socket)或插口。根据RFC 793定义:端口号拼接到IP地址即构成了套接字
所以TCP使用Socket套接字作为端点。
套接字socket = (IP地址:端口号)
每一条TCP连接唯一的被通信两端的两个端点(即套接字对 socket pair)所确定。即:
TCP连接:: = { socket1,socket2 } = { (IP1, Port1), (IP2, Port2) }
这里IP1和IP2分别是两个端点主机的IP地址,而Port1和Port分别是两个端点主机中的端口号
一种理解是Socket就是该模式的一个实现:即socket是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
二、代码分析
代码架构
(一)头文件
1.client.h
主要include一些库,定义一些函数,创建socket对象
代码如下:
#ifndef CLIENT_H
#define CLIENT_H
#include <QMainWindow>
#include <QTcpSocket>
#include <QKeyEvent>
#include <QWidget>
namespace Ui {
class Client;
}
class Client : public QMainWindow
{
Q_OBJECT
public:
explicit Client(QWidget *parent = nullptr);
~Client();
private slots:
void on_connect_button_clicked(bool checked);
void on_send_button_clicked();
void readyRead_SLOT();
void connected_SLOT();
private:
Ui::Client *ui;
QTcpSocket *socket;
};
#endif // CLIENT_H
2.server.h
代码如下:
#ifndef SERVER_H
#define SERVER_H
#include <QMainWindow>
#include <QTcpServer>
#include <QTcpSocket>
#include <QString>
QT_BEGIN_NAMESPACE
namespace Ui {
class Server; }
QT_END_NAMESPACE
class Server : public QMainWindow
{
Q_OBJECT
public:
Server(QWidget *parent = nullptr);
~Server();
private slots:
void on_send_button_clicked();
void on_startorstop_Listen_clicked(bool checked);
void readyRead_SLOT();
void