14.网络编程一些概念

TCP/IP分层:

应用层:应用程序及应用协议的集合

传输层:端口的寻址,寻址任务(进程) TCP/UDP

网络层:提供了端对端(寻址机器)的寻址:IP

物理层:提供了上层访问硬件设备的功能:驱动程序

几个概念:
socket:一系列网络编程接口
IP:网络通信中唯一标定一台机器,NAT转换
端口号:选择原则:>5000

TCP/UDP协议:
TCP:有连接,可靠的协议:数据无丢失、无失序、无错误、无重复
UDP:无连接,不可靠

linux socket编程流程(CS架构):
TCP编程流程(打电话)
server端(接听电话的人):
1.socket-----------------有一个电话
2.bind-------------------绑定一个卡,并把号码告诉别人(自己的号)
3.listen-----------------待机,等待别人打电话进来
4.accept-----------------接电话
5.recv/send--------------通话过程
6.close------------------挂机

client端(打电话的人):
1.socket-----------------有一个电话
2.connect----------------拨打电话(指定对方的号码)
3.recv/send--------------通话过程
4.close------------------挂机

UDP编程流程(发短信)
server端(收短信的人):
1.socket-----------------有一个电话
2.bind-------------------绑定一个卡,并把号码告诉别人(自己的号)
3.recvfrom---------------接收短信(会收到对方的号码)
4.sendto-----------------回发短信
5.close------------------关机

client端(发短信的人):
1.socket-----------------有一个电话
2.sendto-----------------发送短信(指定对方号码)
3.recvfrom---------------接收对方短信
4.close------------------关机

Qt网络编程–TCP编程
1.模块引入:项目文件中添加:QT += network
头文件包含: #include 或#include

2.tcp服务器编程流程–QTcpServer、QTcpSocket
实例化QTcpServer对象----------------------------->socket
进入监听状态–listen(QTcpServer) //不需要再绑定了----------->bind + listen
监测客户端连接–newConnection信号(QTcpServer)---------------->有新连接过来,server就能收到newConnection信号
QTcpSocket<–获得连接–nextPendingConnection(QTcpServer)------------------>accept
连接对端接收信号–readyRead(QTcpSocket)---------------------->如果对端有数据发送,server就能收到readyRead信号
读取客户端消息–readAll(QTcpSocket)-------------------------->recv:读取数据
发送数据–write(QTcpSocket)—>send:发数据
关闭连接–disconnectFromHost()------------------->close

3.tcp客户端编程流程–QTcpSocket
实例化QTcpSocket对象
连接服务器–connectToHost—>接着使用waitForConnected来判断是否连接成功
连接对端接收信号–readyRead
发送数据–write()
关闭连接–disconnectFromHost()

涉及到的接口和类:
bool QTcpServer::listen(const QHostAddress & address = QHostAddress::Any, quint16 port = 0)
QHostAddress:对IP地址进行重新封装 QHostAddress(const QString & address)
QHostAddress::Any = 0.0.0.0 表示监听任何地址

QTcpSocket * QTcpServer::nextPendingConnection()
server端调用此方法从连接队列中获取一个等待连接,并得到客户端的连接。

QTcpSocket的方法:
void connectToHost(const QHostAddress & address, quint16 port, OpenMode openMode = ReadWrite)
bool waitForConnected(int msecs = 30000)

典型使用代码:
socket->connectToHost(“imap”, 143);
if (socket->waitForConnected(1000))
qDebug(“Connected!”);

4.辅助接口–QAbstractSocket
QHostAddress localAddress() //返回本机地址
QHostAddress peerAddress() //返回对端连接地址
quint16 localPort() const
quint16 peerPort() const
SocketState state() const //返回当前状态

//阻塞等待连接,成功后返回true,超时返回false,用于客户端连接
QAbstractSocket::waitForConnected(int msecs = 30000)

信号:
void connected()
void disconnected()

Qt网络编程–UDP编程
1.模块引入:项目文件中添加:QT += network 头文件包含: #include

2.udp服务器编程流程–QUdpSocket
实例化QUdpSocket对象----------------------------------->socket
绑定地址、端口–bind(QHostAddress::LocalHost, 8888)---->bind
收发报文–readDatagram、writeDatagram------------------>recvfrom/sendto

3.接口:
bool QUdpSocket::hasPendingDatagrams() const
qint64 QUdpSocket::readDatagram(char * data, qint64 maxSize, QHostAddress * address = 0, quint16 * port = 0)
qint64 QUdpSocket::writeDatagram(const char * data, qint64 size, const QHostAddress & address, quint16 port)

4.参考QUdpSocket的Detailed Description的案例代码

发布了10 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40083589/article/details/94136975