• 通常的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. pos 访问超时 windows连接超时 497 天后未关闭 TIME_WAIT

    问题描述: nginx连接后台tomcat程序 一直报错 nginx的error日志如下 // :: [error] #: *: A connection attempt failed because ...

  2. tomcat 多端口 多容器 多域名 配置

    先强调一个原则: server下面可以有多个service,用于配置不同监听端口 service下面可以有多个Host,用于配置该端口下的不同域名 Host里可以包含多个Context,用于配置该端口 ...

  3. jquery + ajax 提交数据报错

    报错 Forbidden (CSRF token missing or incorrect.): /account/test/ [20/Oct/2016 18:10:44] "POST /a ...

  4. [CSS]三大特性之一继承性、层叠性、优先级

    <style> div { color: red; font-size: 30px; {#background: #0066ff;#} } </style> <!-- 1 ...

  5. centos7安装node.js

    安装版本:node-v10.15.3 一.安装必要的编译软件包 # yum install gcc gcc-c++ -y 二.从源码下载Nodejs 进入官网选择自己需要的版本 https://nod ...

  6. 08.JS单词整理

    以下为按照文章顺序简单整理的JS单词, 注意:是JS单词注释,部分与英文不符 01.JS语法规范.变量与常量 console——控制台 log——日志 var——变量 variable变量,变化 co ...

  7. C#模拟POST上传文件帮助类(支持https、http)

    public static int PostFile(string getUrl, CookieContainer cookieContainer, HttpHeader header, string ...

  8. JavaScript-状态模式

    状态模式 一个对象有状态变化 每次状态变化都会触发一个逻辑 不能总是用 if...else 来控制 示例:交通信号灯的不同颜色变化 传统的 UML 类图 javascript 中的 UML 类图 cl ...

  9. SAP S4HANA里委外加工采购功能的变化

    SAP S4HANA里委外加工采购功能的变化 [Part 1:主要变化点] 1.1,采购订单界面上的变化, 1.2, 新的事务代码: ME2ON (Subcontracting Cockpit), 1 ...

  10. Leetcode:235. 二叉搜索树的最近公共祖先

    Leetcode:235. 二叉搜索树的最近公共祖先 Leetcode:235. 二叉搜索树的最近公共祖先 Talk is cheap . Show me the code . /** * Defin ...