• 通常的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. Vue简介与基础

    一.什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于 ...

  2. 深浅COPY浅谈

    通俗地谈一下深浅COPY的区别,顺便做个笔记.(纯手打,如有不对之处还望大牛指导改正.) 个人觉得区分这个概念需要从数据类型来切入: 1.如果“被复制对象”(后面简称“原对象”)的数据类型为不可变数据 ...

  3. B树(B-树) 、B+树

    B树(B-树) 1.B-树(B树)的基本概念B-树中所有结点中孩子结点个数的最大值成为B-树的阶,通常用m表示,从查找效率考虑,一般要求m>=3.一棵m阶B-树或者是一棵空树,或者是满足以下条件 ...

  4. transition 过渡的兼容性处理

    transition兼容性: 封装一个js来验证浏览器是否兼容transition,以及选择兼容的写法 以下是transition.js (function(){ //判断transition属性是否 ...

  5. SAP 序列号与库存关联起来?

    SAP 序列号与库存关联起来? SAP系统标准功能可以实现序列号管理.其系统配置也不复杂,但是不少企业却使用不起来.笔者参与的诸多项目里,只有现在所在的项目里有启用序列号管理.基于项目客户所在行业,以 ...

  6. Android中TimePicker时间选择器的使用和获取选择的时和分

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...

  7. BOS只读状态修改

    update T_META_OBJECTTYPE set FSUPPLIERNAME ='PAEZ',FPACKAGEID =null

  8. MFC/QT 学习笔记(三)——MFC模板创建

    新建项目->MFC模板->MFC应用程序->应用程序类型:单个文档:项目样式:MFC 标准->下一步...OK 此时点击运行,可直接弹出窗口. 调整 视图->类视图: · ...

  9. 邓士鹏【MySql大全】

    禁止使用系统关键字: typename 1.计算两个日期的时间差函数 SELECT TIMESTAMPDIFF(MONTH,'2009-10-01','2009-09-01'); interval可是 ...

  10. 深入浅出 .NET C# 反射技术

    反射这个词听起来就很牛逼是吧? 嗯的确,反射是比较高级的特性,只有语言基础很扎实的Dev们才应该使用它. 搞点反射,可以提高程序的灵活性.可扩展性.耦合度. 反射这东西,是为了动态地运行时加载,相比于 ...