C/C++教程

TCP/IP网络编程第四章读书笔记

本文主要是介绍TCP/IP网络编程第四章读书笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

第四章 基于TCP的服务器端/客户端(1)

4.1 理解TCP和UDP

因为TCP套接字是面向连接的,因此又称基于流(stream)的套接字。

TCP/IP协议栈如下:

可以看出在协议栈中,数据收发分为了4个层次化过程,将协议分为多个层次,不仅设计容易,并且可以通过标准化操作设计开放式系统。自底向上查看TCP/IP协议栈,最底层的链路层是物理链接领域标准化的结果;IP层解决在网络中传输数据的路径选择问题,IP本身是面向消息的不可靠的协议,每次传输时会选择路径,但并不一致,如果发生数据丢失或错误则无法解决,IP层无法应对数据错误;TCP/UDP层又称传输层,它们在IP的基础上完成数据传输,TCP通过自身的确认机制和重传机制能够保证在不可靠IP层上的可靠数据传输;套接字就位于应用层,程序员只需要编写应用层协议的程序,网络编程的大部分就是设计并实现应用层协议。

4.2 实现基于TCP的服务器端/客户端

TCP服务器端的函数调用顺序如下:

socket和bind函数已讨论过,服务器端调用listen函数进入等待请求状态,只有调用了listen,客户端才能进入可发出连接请求的状态,此时服务器端的套接字就像一个门卫一样,将发出连接请求的客户端都放入等待队列。

在等待请求后就应该受理请求,这时需要套接字来实现数据交换,但服务器端的套接字正在做门卫(一直监控有没有发出连接请求的客户端),因此需要一个额外的套接字来和客户端通信,accept函数自动创建套接字并连接到客户端。

TCP客户端的调用函数只有connect函数不相同,客户端在调用此函数后,只有服务端接受连接请求或连接请求中断才会返回。接受连接并不意味着服务端accept此客户端,而是进入了等待队列。同时,客户端的IP和端口在connect时自动分配,无需调用bind函数。

两者的函数调用关系如下

客户端只有在服务端调用listen后才能connect,但服务端此时可能已经调用accept进入blocking状态,直到客户端调用connect。

4.3 实现迭代服务器端/客户端

设置好等待队列后,应将所有请求都受理,最简单的就是循环调用accept函数,调用了close后就结束了和某个客户端的连接。

这篇关于TCP/IP网络编程第四章读书笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!