再读Socket编程——《UNIX网络编程(卷一)》学习点滴

简介:

  原先曾以Socket编程为入口开始自己的新的学习,毕竟未曾致用,时至今日已比较生疏。借着阅读《UNIX网络编程(卷一)》(简称UNPv1)的机会,正好复习一番,而且希望将新的感受记录下来。一些技术细节翻阅原书即可,点到为止,不在这篇博文详述。

 

  作者推荐在网络编程中使用snprintf()代替sprintf()、用fget()、strncat()和strncpy()分别代替gets()、strcat()和strcpy();同时提到了更好的替代函数strlcat()和strlcpy()。具体原因是前者的调用会使缓冲区溢出,而这是黑客网络入侵的一种方式。snprintf()需要缓冲区长度作为显式参数,超过缓冲区尾端的字符都将被抛弃。其余函数情形类似。

        ----第1章 简介,1.5 一个简单的时间获取服务器程序

 

  再看TCP状态转换图,发现以前忽略了一些细节:除了三路握手、关闭连接的一些典型状态,还有由于双方同时发送SYN造成的同时打开;同时发送FIN造成的同时关闭;以及TIME_WAIT状态存在的理由:最后的ACK可能丢失,使这次连接老的分组自然消逝。

        ----第2章  传输层:TCP、UDP和SCTP,2.6 TCP连接的建立和终止

  SCTP是相对而言比较新的协议,同时以前从未接触过。面向连接按序递送的消息、所连接端点之间多个流、单个端点支持多个IP 地址是目前所了解的SCTP的特征,四路握手、拆连亦与TCP不同。

        ----第2章  传输层:TCP、UDP和SCTP,2.8 SCTP关联的建立和终止

  虽然和TCP一样都有应用进程缓冲区(TCP可以是任意大小),但UDP的套接字发送缓冲区实际上是不存在的,通常过程是把应用进程缓冲区内容复制到某一个内核缓冲区,发送后即丢弃。

        ----第2章  传输层:TCP、UDP和SCTP,2.11 缓冲区大小及限制

 

  关于开发包裹函数readn()、writen()的必要性在于,不同于文件读写,使用read()和write()时,内核提供的套节字缓冲区在某个时刻可能不足以放下所应输入或输出的n个字符,这时便要重复调用read()或write()以达到目的,在未结束前完成n个字符的输入或输出。

        ----第3章  套接字编程简介,3.9 readn、writen和readline函数

 

  listen()的第二个参数backlog涉及到内核对于监听套接字维护的两个队列的机制。这两个队列存放的是ESTABLISHED和SYN_RCVD状态的排队的套接字之和,最初的设计是,这个和等于backlog。然而目前的实现并不明确,而且在不同的UNIX实现中,实际已排队连接的最大数目一般比backlog稍大一些。顺便提一下,在对这两个队列有所了解之后,就不难明白accept()如何获取一个ESTABLISHED的连接并赋予它一个套接字结构的了。

        ----第4章  基本TCP套接字编程,4.5 listen函数

 

  select()中间的三个参数readset、writeset和exceptest会在返回时把代表某一位就绪的描述符置为1,未就绪置为0,因此每次调用select()时应该先把关心的位置为1。

        ----第6章  I/O复用:select和poll函数,6.3 select函数      

 

  对于线程私有数据相关机制和使用,UNP比APUE介绍的要全面一些。每个进程都有一个key结构,它由系统维护,存放某个索引号的线程私有数据是否在被使用的标志和析构函数,而私有数据本身由存放某一个线程信息的Thread中对应的指针访问(这是笔者在阅读了P543至544相关内容后自己的理解)。相关函数的使用方法比较典型,记录在下面。my_read和readline的关系是,readline调用my_read,先读入需要的全部数据进入自己的缓冲区,每次返回一个,循环至readline通过调用读取完毕。

使用线程私有数据的readline函数

        ----第26章 线程,26.5 线程特定数据

 

  编写SCTP程序需要注意几个地方:开启内核支持(2.4及以下不支持)、安装运行库、编译时需要-lsctp选项。

  tcp_connect()利用getaddrinfo()屏蔽了很多细节操作,屏蔽了IPv4和IPv6在填充地址结构的差别,确实很有价值。

(549~560涉及到非阻塞I/O,未读)

 

  目前手上有其他工作要做,UNP的第三部分高级套接字编程就不再精读,全书作为以后查阅时参考的手册。




本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/archive/2012/06/19/2446058.html,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
在数字时代,网络应用成为连接世界的桥梁。Python凭借简洁的语法和丰富的库支持,成为开发高效网络应用的首选。本文通过实时聊天室案例,介绍Python Socket编程的基础与进阶技巧。基础篇涵盖服务器和客户端的建立与数据交换;进阶篇则探讨多线程与异步IO优化方案,助力提升应用性能。通过本案例,你将掌握Socket编程的核心技能,推动网络应用飞得更高、更远。
49 1
|
11天前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
13 1
|
14天前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
15 1
|
20天前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。
|
23天前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
1月前
|
算法 Unix 数据安全/隐私保护
Python编程--UNIX口令破解机
Python编程--UNIX口令破解机
|
2月前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
在数字宇宙中,网络如同复杂脉络连接每个角落,Python Socket编程则是开启这一世界的钥匙。本文将引导你从基础概念入手,逐步掌握Socket编程,并通过实战示例构建TCP/UDP服务器与客户端。你将学会使用Python的socket模块进行网络通信,了解TCP与UDP的区别,并运用多线程与异步IO提升服务器性能。跟随本文指引,成为网络世界的建筑师,构建自己的网络帝国。
35 2
|
2月前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
在网络编程的世界里,Socket编程是连接数据与服务的关键桥梁。对于初学者,这往往是最棘手的部分。本文将用Python带你轻松入门Socket编程,从创建TCP服务器与客户端的基础搭建,到处理并发连接的实战技巧,逐步揭开网络编程的神秘面纱。通过具体的代码示例,我们将掌握Socket的基本概念与操作,让你成为网络编程的高手。无论是简单的数据传输还是复杂的并发处理,Python都能助你一臂之力。希望这篇文章成为你网络编程旅程的良好开端。
55 3
|
2月前
|
网络协议 开发者 Python
网络编程小白秒变大咖!Python Socket基础与进阶教程,轻松上手无压力!
在网络技术飞速发展的今天,掌握网络编程已成为开发者的重要技能。本文以Python为工具,带你从Socket编程基础逐步深入至进阶领域。首先介绍Socket的概念及TCP/UDP协议,接着演示如何用Python创建、绑定、监听Socket,实现数据收发;最后通过构建简单的聊天服务器,巩固所学知识。让初学者也能迅速上手,成为网络编程高手。
69 1
|
2月前
|
网络协议 安全 网络安全
震惊!Python Socket竟能如此玩转网络通信,基础到进阶全攻略!
【9月更文挑战第12天】在网络通信中,Socket编程是连接不同应用与服务的基石。本文通过问答形式,从基础到进阶全面解析Python Socket编程。涵盖Socket的重要性、创建TCP服务器与客户端、处理并发连接及进阶话题如非阻塞Socket、IO多路复用等,帮助读者深入了解并掌握网络通信的核心技术。
58 6