Socket之TCP-IP
- 通常的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的更多相关文章
- 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结
引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...
- 网络通信 --> Socket、TCP/IP、HTTP、FTP及网络编程
Socket.TCP/IP.HTTP.FTP及网络编程 聊聊Socket.TCP/IP.HTTP.FTP及网络编程
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP ...
- socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少
常识一:文件句柄限制 在Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File ...
- 关于Socket、TCP/IP、HTTP、FTP及网络编程
来源:陶邦仁 链接:http://blog.jobbole.com/99694/ 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,再者如何进行可靠高效 ...
- SOCKET 编程TCP/IP、UDP
TCP/IP 资源:http://download.csdn.net/detail/mao0514/9061265 server: #include<stdio.h> #include&l ...
- Python之路(第三十篇) 网络编程:socket、tcp/ip协议
一.客户端/服务器架构 1.硬件C/S架构(打印机) 打印机作为一个服务端,电脑连接打印机进行打印 2.软件C/S架构 互联网中处处是C/S架构 如谷歌网站是服务端,你的浏览器是客户端(B/S架构也是 ...
- SOCKET,TCP/IP,UDP,HTTP,FTP总结
一.TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组(主要解决数据如何在网络中传输),可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议 ...
- socket、tcp/ip协议、udp协议
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...
- socket http tcp ip 区别联系
功能是实现继承复用.刚才做了一个简要的概述,里面有一些常用的概念,这里做个简短的概念普及介绍:(1),TCP/IP------TPC/IP协议是传输层协议,主要解决数据如何在网络中传输.(2),Soc ...
随机推荐
- css3 3d api
perspective 人看东西的距离 perspective: 500; 越小3d效果越好 perspective-origin观察视点.此处默认为视图的中心点 transform-origin:2 ...
- vue学习(一)项目搭建
首先需要配置node和npm,如果没有安装的话,百度一下安装教程. 如果感觉npm下载速度慢,可以使用淘宝镜像cnpm,链接地址: http://npm.taobao.org/ 安装cnpm npm ...
- 小程序在wxml页面格式化类似的2019-02-16T10:54:47.831000时间
其实新建小程序的时候,会有一个util.js文件,这个文件里已经有时间格式化的方法了,可是它却不能再wxml页面调用, 不过wxml页面是支持引入.wxs文件的,我们重新写一个这样子的工具文件就解决了 ...
- solr常用操作及集成分词器或cdh集群部署说明
首先,如果是从http://lucene.apache.org/solr/下载的solr,基本都是自带集成的jetty服务,不需要单独搭建tomcat环境,但是要注意jdk版本,直接解压通过cmd命令 ...
- 阿里云ECS服务器,mysql无法外网访问
可参考https://www.jianshu.com/p/7a41734b502e 问题原因 未授权远程IP地址登录.root用户默认只能在localhost也就是本机登录 解决方案 在服务器上登录数 ...
- 实验一 GIT 代码版本管理
实验一 GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ...
- Python——格式输出,基本数据
一.问题点(有待解决) 1.Python中只有浮点数,20和20.0是否一样? from decimal import Decimal a = Decimal('1.3') round() 参考文章 ...
- 正则表达式过滤html注释内容
Regex.Replace("<!--(.|[\r\n])*?-->",string.Empty)
- C++ Primer 抄书笔记(一)
操作系统通过调用main函数(function)来运行C++程序: int main(){ ; } main函数返回类型必为int.大多数系统中main的返回值被用来指示状态.0即成功:非0由系统定义 ...
- git本地创建多个分支互不干扰
git本地创建多个分支,互不干扰. 情景:在做某个需求a时,先需要修改紧急bug b:发版时发的是远程dev的代码. 方式一(推荐): (1)本地已有分支dev,写了需求a,先commit,即将工 ...