• 通常的TCP/IP流程如下:

  TCP/IP的通讯更像是打电话,连接上通了确认是自己拨叫的用户之后才能进行正常通话,更加安全合理。

  • Qt中的TCP/IP流程如下:

  Qt中流程和普通的思路一样,只是封装成了自己的函数,使用更加方便

  • 实现的效果如下

  • 参考代码如下:

  服务器.h文件:

 #ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QString>
namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = );
~Widget(); private slots:
void on_send_clicked();
void communication();
void on_disconnect_clicked();
void showtext();
private:
Ui::Widget *ui;
QTcpServer *TcpServer;
QTcpSocket *TcpSocket;
}; #endif // WIDGET_H

  服务器.cpp文件:

 #include "widget.h"
#include "ui_widget.h" Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
TcpServer = new QTcpServer(this);
TcpSocket = NULL;
setWindowTitle("服务器:6666");
TcpServer->listen(QHostAddress::Any,);
connect(TcpServer,&QTcpServer::newConnection,this,&Widget::communication); }
void Widget::communication()
{
TcpSocket=TcpServer->nextPendingConnection();
QString ip = TcpSocket->peerAddress().toString();
ui->textEdit->setText(ip);
connect(TcpSocket,&QTcpSocket::readyRead,this,&Widget::showtext); }
void Widget::showtext()
{
QByteArray array = TcpSocket->readAll();
ui->textEdit->append(array);
}
Widget::~Widget()
{
delete ui;
} void Widget::on_send_clicked()
{
if(TcpSocket == NULL)
{
return;
}
QString text = ui->textEdit_2->toPlainText();
TcpSocket->write(text.toUtf8().data()); } void Widget::on_disconnect_clicked()
{
if(TcpSocket == NULL)
{
return;
}
TcpSocket->disconnectFromHost();
TcpSocket->close();
TcpSocket = NULL; }

  客户端.h文件:

 #ifndef SOCKETWIDGET_H
#define SOCKETWIDGET_H #include <QWidget>
#include <QTcpSocket>
#include <Qstring>
#include <QHostAddress>
namespace Ui {
class SocketWidget;
} class SocketWidget : public QWidget
{
Q_OBJECT public:
explicit SocketWidget(QWidget *parent = );
~SocketWidget();
public slots:
void dealdata();
void dealread();
private slots:
void on_send_clicked(); void on_disconnect_clicked(); void on_connect_clicked(); private:
Ui::SocketWidget *ui;
QTcpSocket *TcpSocket;
}; #endif // SOCKETWIDGET_H

  客户端.cpp文件:

 #include "socketwidget.h"
#include "ui_socketwidget.h" SocketWidget::SocketWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::SocketWidget)
{
ui->setupUi(this);
TcpSocket = new QTcpSocket(this);
setWindowTitle("客户端");
connect(TcpSocket,&QTcpSocket::connected,this,&SocketWidget::dealdata);
connect(TcpSocket,&QTcpSocket::readyRead,this,&SocketWidget::dealread);
}
void SocketWidget::dealdata()
{
QString str= "已连接服务器";
ui->read->setText(str);
}
SocketWidget::~SocketWidget()
{
delete ui;
}
void SocketWidget::dealread()
{
QByteArray array = TcpSocket->readAll();
ui->read->append(array);
}
void SocketWidget::on_send_clicked()
{
QString sendtext = ui->write->toPlainText();
TcpSocket->write(sendtext.toUtf8().data());
//发送数据
} void SocketWidget::on_disconnect_clicked()
{
TcpSocket->disconnectFromHost();
TcpSocket->close();
} void SocketWidget::on_connect_clicked()
{
quint16 port = ui->port->toPlainText().toInt();
QString ip = ui->ip->toPlainText();
TcpSocket->connectToHost(QHostAddress(ip),port);
//建立主动连接
}

Socket之TCP-IP的更多相关文章

  1. 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结

    引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...

  2. 网络通信 --> Socket、TCP/IP、HTTP、FTP及网络编程

    Socket.TCP/IP.HTTP.FTP及网络编程 聊聊Socket.TCP/IP.HTTP.FTP及网络编程

  3. 聊聊Socket、TCP/IP、HTTP、FTP及网络编程

    1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP ...

  4. socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少

    常识一:文件句柄限制 在Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File ...

  5. 关于Socket、TCP/IP、HTTP、FTP及网络编程

    来源:陶邦仁 链接:http://blog.jobbole.com/99694/ 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,再者如何进行可靠高效 ...

  6. SOCKET 编程TCP/IP、UDP

    TCP/IP 资源:http://download.csdn.net/detail/mao0514/9061265 server: #include<stdio.h> #include&l ...

  7. Python之路(第三十篇) 网络编程:socket、tcp/ip协议

    一.客户端/服务器架构 1.硬件C/S架构(打印机) 打印机作为一个服务端,电脑连接打印机进行打印 2.软件C/S架构 互联网中处处是C/S架构 如谷歌网站是服务端,你的浏览器是客户端(B/S架构也是 ...

  8. SOCKET,TCP/IP,UDP,HTTP,FTP总结

    一.TCP/UDP,SOCKET,HTTP,FTP简析   TCP/IP是个协议组(主要解决数据如何在网络中传输),可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议 ...

  9. socket、tcp/ip协议、udp协议

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...

  10. socket http tcp ip 区别联系

    功能是实现继承复用.刚才做了一个简要的概述,里面有一些常用的概念,这里做个简短的概念普及介绍:(1),TCP/IP------TPC/IP协议是传输层协议,主要解决数据如何在网络中传输.(2),Soc ...

随机推荐

  1. ceph集群部署

    最近在学习 kubernetes 过程中,想实现 pod 数据的持久化.在调研的过程中,发现 ceph 在最近几年发展火热,也有很多案例落地企业.在选型方面,个人更加倾向于社区火热的项目,Gluste ...

  2. post 两种方式 application/x-www-form-urlencoded和multipart/form-data

    本次主要涉及 application/x-www-form-urlencoded方式. postman访问方式如图: java代码实现: 首先使用maven作为第三方依赖管理: <depende ...

  3. saltstack集合

    saltstack集合 saltstack(一):   saltstack简介 saltstack(二):   saltstack安装及配置 saltstack(三):   saltstack远程执行 ...

  4. k8s系列---故障

    kubectl get namespace prom Terminating 45h namespace 出现Terminating 状态,一直删不掉 解决: 1:导出namespace的json文件 ...

  5. Vscode开发Java环境搭建

    VSCode 开发 JAVA 微软为 Java 开发者推出了一个 Visual Studio Code 的安装程序.Visual Studio Code 中目前提供了许多 Java 扩展. 该软件包可 ...

  6. 【python-leetcode206-翻转链表】反转链表

    问题描述: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可 ...

  7. 第一篇 Springboot + Web MVC + MyBatis + 简单UI + Thymeleaf实现

    源码链接:https://pan.baidu.com/s/1-LtF56dnCM277v5lILRM7g 提取码:c374 第二篇 Springboot mybatis generate根据数据库表自 ...

  8. ClientAbortException :客户端异常终止

    ClientAbortException :客户端异常终止 java.io.IOException: 你的主机中的软件中止了一个已建立的连接. 罪魁祸首: <img src="chec ...

  9. JDK SPI 机制

    一.概述 最早看到 SPI 这个机制是在 dubbo 实现 中,最近发现原来也不是什么新东西,竟然就是 JDK 中内置的玩意,今天就来一探究竟,看看它到底是什么玩意! SPI的全称是 Service ...

  10. Hash存储模型、B-Tree存储模型、LSM存储模型介绍

    每一种数据存储系统,对应有一种存储模型,或者叫存储引擎.我们今天要介绍的是三种比较流行的存储模型,分别是: Hash存储模型 B-Tree存储模型 LSM存储模型 不同存储模型的应用情况 1.Hash ...