qt4 tcp/ip协议4个层次

本文深入解析TCP/IP协议的四个层次:网络接口层、网间层、传输层和应用层,详细阐述了各层的功能及其实现方式。

refer to http://www.netboy365.com/article.asp?id=838

tcp/ip协议的4个层次:


 TCP/IP协议被组织成四个概念层,其中有三层对应于ISO参考模型中的相应层。ICP/IP协议族并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议协同工作。

  TCP/IP分层模型的四个协议层分别完成以下的功能:

  第一层 网络接口层


  网络接口层包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。
所以tcp/ip协议与iso协议的对照关系是

refer to 
http://www.cisco.com/en/US/docs/internetworking/troubleshooting/guide/tr1907.html


  第二层 网间层

  网间层对应于OSI七层参考模型的网络层。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。

  第三层 传输层

  传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。

  第四层 应用层

  应用层对应于OSI七层参考模型的应用层和表达层。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。

### Qt TCP/IP 网络编程教程 #### 创建TCP客户端和服务器的基础结构 为了在Qt中实现TCP/IP通信,可以使用`QTcpSocket`类来创建客户端应用,并用`QTcpServer`类构建服务端逻辑。下面展示了一个简单的例子,其中包含了基本的发送接收功能。 对于客户端而言,初始化时需指定目标主机名或IP地址以及端口号: ```cpp #include <QCoreApplication> #include <QTcpSocket> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QTcpSocket socket; socket.connectToHost("127.0.0.1", 9190); // 连接到本地的服务端[^3] if (!socket.waitForConnected(5000)) { qDebug() << "Error:" << socket.errorString(); return -1; } QByteArray message = "Hello Server"; socket.write(message); while (true){ if(socket.bytesAvailable()){ break; } } qDebug()<<"Received:"<<QString::fromUtf8(socket.readAll()); return a.exec(); } ``` 而在服务器这边,则要监听特定端口等待来自客户的连接请求并处理传入的数据流: ```cpp #include <QCoreApplication> #include <QTcpServer> #include <QTcpSocket> class MyTcpServer : public QObject { Q_OBJECT public slots: void startServer(){ server.listen(QHostAddress::Any, 9190); // 开始监听所有可用接口上的9190端口 connect(&server,SIGNAL(newConnection()),this,SLOT(handleNewConnection())); } private slots: void handleNewConnection(){ QTcpSocket* clientConnection = server.nextPendingConnection(); connect(clientConnection,SIGNAL(disconnected()), clientConnection,SLOT(deleteLater())); connect(clientConnection,SIGNAL(readyRead()), this,SLOT(readClientData())); qDebug()<< "new connection!"; } void readClientData(){ QTcpSocket* sender_socket = qobject_cast<QTcpSocket*>(sender()); if(sender_socket){ qDebug()<<"received data from client:"<<sender_socket->readAll(); sender_socket->write("Message received"); } } private: QTcpServer server; }; // 主函数部分保持不变... MyTcpServer my_server; int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); my_server.startServer(); return app.exec(); } #include "main.moc" ``` 上述代码展示了怎样建立一个基础的TCP客户机和服务端应用程序框架。当启动这两个程序之后,它们之间就可以互相交换信息了。需要注意的是实际开发过程中还需要考虑更多的细节比如错误处理机制、多线程支持等特性以提高系统的稳定性和效率[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值