TCP/IP网络编程
TCP/IP网络编程
weifc-wei
遇到问题,解决问题。咯卡咯伽!!!
展开
-
feof() 巨坑有兴趣了解一下!!!
一、feof()是什么?feof()是检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0一般在文件操作,中经常使用feof()判断文件是否结束。二、feof()的经典错误#include<stdio.h>int main(void){ FILE *p; p = fopen("open.txt", "r"); if (feof(p)) { printf("文件为空。"); } else {原创 2020-09-21 00:28:52 · 1442 阅读 · 1 评论 -
结束网络编程_第24章制作 HTTP 服务器端
24.1 HTTP 概要本章以编写真实应用程序为目标, 在所学理论知识的基础上, 编写 HTTP (Hypertext Transfer Protocol, 超文本传输协议) 服务器端, 即 Web 服务器端.理解 Web 服务器端互联网是普及使 Web 服务器端为大众熟知. 下面是我对 Web 服务器端的定义:HTTP 是 Hypettext Transfer Protocol 的缩写, Hypertext (超文本) 是可以根据客户端请求而跳转的结构化信息. 例如, 各位通过浏览器访问图灵社.翻译 2020-06-23 23:21:14 · 165 阅读 · 0 评论 -
TCP/IP网络编程_基于Windows的编程_第23章IOCP
23.1 通过重叠 I/O 理解 IOCP本章的 IOCP (Input Output Completion Port, 输入输出完成端口) 服务器端模型是很多 Windows 程序员关注的焦点. 各位若急于求成而跳过了第21章翻译 2020-06-22 21:53:17 · 317 阅读 · 0 评论 -
TCP/IP网络编程_基于Windows的编程_第22章重叠I/O模型
22.1 理解重叠 I/O 模型第21章异步处理的并非I/O, 而是"通知". 本章讲解的才是以异步方式处理 I/O 的方法. 只有理解了二者的区别和各自的优势, 才能更轻松地学习第23章的 IOCP.重叠 I/O其实各位对于重叠 I/O 并不陌生. 大家已经掌握了异步 I/O. 我通过图21-2说明过异步I/O模型, 实际上, 这种异步 I/O 就相当于 重叠I/O. 下面我将给出重叠I/O, 各位可自行判断二者是否相似. 图22-1 给出重叠 I/O 的原理.如图22-1 所示, 同一线程内.翻译 2020-06-18 12:53:55 · 291 阅读 · 0 评论 -
TCP/IP网络编程_基于Windows的编程_第21章异步通知I/O模型
21.1 理解异步通知I/O模型各位应该还记得介绍过的 select 函数, 它是实现并发服务器端的方法之一. 本章内容可以理解为 select 模型的改进方式.理解同步和异步首先解析 “异步(Asynchronous)的含义”. 异步主要指 “不一致”, 它在数据I/O中非常有用. 之前的 Windows 示例中主要通过send & recv 函数进行同步 I/O. 调用 send 函数时, 完成数据传输后才能从函数返回(确切地说, 只有把数据完全传输到)...翻译 2020-06-17 16:02:04 · 299 阅读 · 0 评论 -
TCP/IP网络编程_基于Windows的编程_第20章Windows中的线程同步
20.1 同步的分类及 CRITICAL_SECTION 同步Windows 中存在多种同步技术, 它们的基本概念大同小异, 相互间也有一定联系, 所以不难掌握.用户模式(User mode) 和内核模式(Kernal mode)Windows 操作系统的运行方式(程序运行方式) 是 “双模式操作(Dual-mode Operation)”, 这意味着 Windows 在运行过程中存在如下2种模式.内核是操作系统的核心模块, 可以简单定义如下形式.实际上, 在应用程序运行过程中, Windo.翻译 2020-06-16 12:43:48 · 484 阅读 · 1 评论 -
TCP/IP网络编程_基于Windows的编程_第19章Windows平台下线程的使用
19.1 内核对象要想掌握 Windows 平台的线程, 应首先理解 "内核对象(Kernel Objects)"的概念. 如果仅介绍 Windows 平台下线程使用技巧, 则可以省略相对陌生的内核对象相关内容. 但这并非我所愿, 而且这种方式对各位也没有帮助.内核对象的定义操作系统创建的资源(Resource) 有很多种, 如进程, 线程, 文件及即将介绍的信号量, 互斥量, 其中大部分都是通过程序员的请求创建的, 而且请求文件(请求中使用的函数) 各不相同. 虽然存在一些差异, 但他们之间也有如.翻译 2020-06-13 21:44:01 · 214 阅读 · 0 评论 -
TCP/IP网络编程_基于Linux的编程_第18章多线程服务器端的实现
18.1 理解线程的概念第19章将介绍 Windows 线程, 而本章给出的是关于线程的通用说明, 掌握了本章内容才能学好 Windows 线程.引入线程的背景第10章介绍了多进程服务器端的实现方法. 多进程模型与 select 或 epoll 相比的确有自身的优点, 但同时也有问题. 如前所述的...翻译 2020-06-11 19:53:59 · 242 阅读 · 0 评论 -
TCP/IP网络编程_基于Linux的编程_第17章优于select的epoll
17.1 epoll 理解及应用select 复用方法其实由来已久, 因此, 利用该技术后, 无论如何优化程序性能也无法同时接入上百个客户端(当然, 硬件性能不同, 差别也很大). 这种select 方式并不适合以Web服务端开发为主流开发环境, 所以要学习Linux平台下的epoll.基于 select 的 I/O 复用技术速度慢的原因第12章曾经实现基于select 的I/O 复用服务器端, 很容易从代码分析出不合理的设计, 最主要的两点如下.上述两点可以从第12章示例echo_selects.翻译 2020-06-09 17:34:45 · 207 阅读 · 0 评论 -
TCP/IP网络编程_基于Linux的编程_第16章关于I/O分流的其他内容
16.1 分离 I/O 流“分离I/O流” 是一种常用表达. 有 I/O 工具翻译 2020-06-08 15:55:23 · 157 阅读 · 0 评论 -
TCP/IP网络编程_基于Linux的编程_第15章套接字和标准I/O
15.1 标准I/O 函数的优点本章将介绍利用标准的I/O函数收发数据的方法. 如果各位不太熟悉或已忘记多种标准函数, 最好准备一本C语言的书在开始学习本章的学习. 当然, 如果熟练掌握了文件操作时使用fopen, feof, fgetc, fputs 函数, 就没必要再参考C语言的书了.标准 I/O 函数的两个优点将标准 I/O 函数用于数据通信并非难事. 但仅掌握函数的使用方法并没有太大的意义, 至少应该了解这些函数具有的优点. 下面列出的是标准I/O函数的两个优点.关于移植性无需过多的解析..翻译 2020-06-07 17:31:26 · 159 阅读 · 0 评论 -
TCP/IP网络编程_第14章多播与广播
14.1 多播多播(Multicast)方式的数据传输是基于UDP完成的. 因此, 与UDP服务器/客户端的实现方式非常接近. 区别在于, UDP数据传输以单一目标进行, 而多播数据同时传递到加入(注册)特定组的大量主机. 换言之, 采用多播方式时, 可以同时向多个主机传递数据.多播的数据传输方式及流量方面的优点多播的数据传输特点可整合如下.多播组是D类IP地址(224.0.0.0 ~ 239.255.255.255), "加入多播组"可以理解为通过程序完成如下声明:多播是基于UDP完成的,.翻译 2020-06-06 10:34:03 · 657 阅读 · 0 评论 -
TCP/IP网络编程_第13章多种I/O函数
13.1 send & recv 函数虽然我们在之前的 Windows 实例中一直使用 send & recv 函数, 但从未向最后一个参数传递过除0之外的其他值. 也就是说, 我们甚至连 Winsows 平台下的 send & recv 函数都没有完全理解并应用.Linux 中的 send & recv虽然第一章介绍过 send & recv 函数, 但那时是基于 Windows 平台介绍的. 本节将介绍 Linux 平台下的send & recv .翻译 2020-06-05 17:05:56 · 308 阅读 · 1 评论 -
TCP/IP网络编程_第12章I/O复用
12.1 基于 I/O 复用的服务器端接下来讨论并发服务器端实现方法的延伸. 如果有读者已经跳过第10章和第11章, 那就只需把本章内容当作并发服务器实现的第一种方法即可. 将要讨论的内容中包括一部分与多进程服务器端的比较, 跳过第10章和第11章的读者简单浏览即可.多进程服务器端的缺点和解决方法为了构建并发服务器, 只要有客户端连接请求就会创建新进程. 这的确是实际操作中采用的一种方案, 但并非十全十美, 因为创建进程是需要付出极大的代价. 这需要大量的运算和内存空间, 由于每个进程都具有独立的内.翻译 2020-06-04 16:21:02 · 258 阅读 · 0 评论 -
TCP/IP网络编程_第11章进程间通信
11.1 进程间通信的基本概念进程间通信(Inter Process Communication) 意味着这个不同进程间可以交换数据, 为了完成这一点, 操作系统中应提供两个进程可以同时访问内存空间.对进程间通信的基本理解理解好进程间通信并没有想象中那么难, 进程A和进程B之间的如下谈话内容就是一种进程间通信规则.也就是说, 进程A通过bread将自己的状态通知给了进程B, 进程B通过变量bread 听到了进程进程A的话. 因此, 只要有两个进程可以同时访问的内存空间, 就可以通过此空间交换数据.翻译 2020-06-04 08:17:05 · 239 阅读 · 0 评论 -
TCP/IP网络编程_第10章多进程服务器端(下)
信号与 signal 函数下列进程和操作系统间的对话是帮助大家理解信号处理而编写的, 其中包含了所有信号处理相关内容.上述对话中进程所讲相当于"注册信号" 过程, 即进程发现自己的子进程结束时, 请求操作系统调用特定函数. 该请求通过如下函数调用完成 (因此称此函数为信号注册函数).上述函数的返回值类型为函数指针, 因此函数声明有些繁琐. 若各位不太熟悉返回值类型为函数指针的声明, 希望加强学习(不懂函数指针将无法理解后续内容). 现在为了便于讲解, 我将上述函数声明整理如下调用上述函数时,翻译 2020-06-03 15:33:40 · 226 阅读 · 0 评论 -
TCP/IP网络编程_第10章多进程服务器端(上)
10.1 进程概念及应用利用之前学习到的内容, 我们可以构建按序向第一个客户端到第一百个客户端提供服务的服务器端. 当然, 第一个客户端不会抱怨服务器端, 但如果每个客户端的平均服务器时间为0.5秒, 则第100个客户端会对服务器端产生相当大的不满.两种类型的服务器端如果真正为客户端着想, 应提高客户端满意度平均标准. 如果有下面这种类型的服务器端, 各位应该感到满意了吧.如果排在前面的请求数能用一只手数清, 客户端当然会对服务器端感到满意. 但只要超过这个数, 客户端就会开始抱怨. 还不如下面.翻译 2020-06-02 08:50:38 · 200 阅读 · 0 评论 -
TCP/IP网络编程_第9章套接字的多种可选项
9.1 套接字可选项和I/O 缓冲大小我们进行套接字编程时往往只关注数据通信, 而忽略了套接字具有的不同特性. 但是, 理解这些特性并根据实际需要进行更改也十分重要.套接字多种可选项我们之前写的程序都是创建好套接字后(未经特别操作) 直接使用的, 此时通过默认的套机字特性进行数据通信. 之前的示例较为简单, 无需特别操作套接字特性, 但有时的的确需要更改.从表9-1 中可以看出, 套接字可选项是分层的. IPPROTO_IP 层可选项是IP 协议相关事项, IPPROTO_TCP 层可选项是T.翻译 2020-06-01 10:43:11 · 182 阅读 · 0 评论 -
TCP/IP网络编程_第8章域名及网络地址
8.1 域名系统DNS 是对IP地址和域名进行相互转换的系统, 其核心是DNS服务器什么是域名提供网络服务的服务器端也是通过IP地址区分的, 但几乎不可能以非常难记的IP地址形式交换服务器地址信息. 因此, 将容易记, 易表达域名并取代IP地址.DNS 服务器在浏览器地址中输入Naver 网站的IP地址222.122.195.5 即可浏览Naver 网络主页. 但我们通过常输入Naver 网站的域名www.baidu.com 访问网站, 二者之间究竟有何区别?从进入Naver 网站主页这一结果.翻译 2020-05-31 15:39:02 · 279 阅读 · 0 评论 -
TCP/IP网络编程_第7章优雅地断开套机字连接
7.1 基于 TCP 的半关闭TCP 中的断开连接过程比建立连接过程更重要, 因为连接过程中一般不会出现大的变数, 但断开过程有可能发生预想不到的情况, 因此应准确掌握下面要讲解的半关闭(Half-close), 才能明确断开过程.单方面断开连接带来的问题Linux 的close函数和Windows 的closesocket函数意味完全断开连接. 完全断开不仅指无法传输数据, 而且也不能接受数据. 因此, 在某些情况下, 通信一方调用close或closesocket函数断开连接就显得不太优雅, 图.翻译 2020-05-30 20:06:25 · 225 阅读 · 0 评论 -
TCP/IP网络编程_第6章基于UDP的服务器端/客户端
6.1 理解 DUP我们在第4章学习TCP的过程中, 还同时了解了 TCP/IP 协议. 在4层TCP/IP模型中, 上数第二层传输(Transport)层分为TCP和UDP这两种. 数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完成的UDP方式.UDP 套接字的特点下面通过信件说明 UDP 的工作原理, 这是讲解UDP 时使用的传统示例, 它与 UDP 特性完全相符. 寄信前应在信上填好寄信人和收信人的地址, 之后贴上邮票即可. 当然, 信件的特点使我们无法确认对方是否收到.翻译 2020-05-30 14:09:55 · 392 阅读 · 0 评论 -
TCP/IP网络编程_第5章基于TCP的服务器端/客户端(2)
TCP/IP网络编程_第4章基于TCP的服务器端/客户端(1) 4.1-4.5翻译 2020-05-29 16:01:56 · 351 阅读 · 0 评论 -
TCP/IP网络编程_第4章基于TCP的服务器端/客户端(1) 4.1-4.5
4.3 实现迭代服务器端/客户端本书编写回声(echo)服务器端/客户端. 顾名思义, 服务器端将客户端传输的字符串数据原封不动地传回客户端, 就像会回声一样. 在此之前, 需要先解析一下迭代服务器端.实现迭代服务器端之前讨论的Hello word 服务器端处理完1个客户端连接请求即退出, 连接请求等待队列实际没有太大意义. 但这并非我们想象的服务器端. 设置好等待队列的大小后, 应向所有客户端提供服务. 如果想继续受理后续客户端连接请求, 应怎样扩展代码? 最简单的方法就是插入循环语句反复调用acc翻译 2020-05-26 18:24:16 · 357 阅读 · 0 评论 -
TCP/IP网络编程_第4章基于TCP的服务器端/客户端(1) 4.1-4.2
4.1 理解 TCP 和 DUP根据数据传输方式的不同, 基于网络协议的套接字一般分为 TCP 套接字和 UDP 套接字. 因为 TCP 套接字是面向连接的, 因此又基于流(stream) 的套接字.TCP 是 (传输控制协议)的简写, 意为"对数据传输过程的控制". 因此, 学习控制方法及范围有助于正确理解 TCP 套接字.TCP/IP 协议栈讲解TCP前先介绍 TCP 所属的 TCP/IP 协议栈(Stack, 层), 如图4-1所示.从图4-1可以看出, TCP/IP 协议栈共分4层, .翻译 2020-05-26 10:29:10 · 431 阅读 · 0 评论 -
TCP/IP网络编程_第3章地址族与数据序列 3.4-3.6
3.4 网络地址的初始化与分配前面已讨论过网络字节序, 接下来介绍以bind函数为代表的结构体的应用.将字符串信息转换为网络字节序的整型数sockaddr_in 中保存地址信息的成员为32位整数型. 因此, 为了分配IP 地址, 需要将其表示为 32 位整数型数据. 这对于只熟悉字符串信息的我们来说实非易事. 各位可以尝试将 IP 地址 201.211.214.36 转换为4字节整数型数据.对于IP 地址的表示, 我们熟悉的是分十进制表示法(Dotted Decimal Notation), 而非整翻译 2020-05-25 16:47:31 · 492 阅读 · 0 评论 -
TCP/IP网络编程_第3章地址族与数据序列 3.1-3.3
TCP/IP网络编程_第3章地址族与数据序列第2章中讨论了套接字的创建方法, 如果把套接字比喻为电话, 那么目前只安装了电话机. 本章将着重讲解给电话机分配号码的方法. 即给套接字分配 IP 地址和端口号. 这部分内容也相对有些枯燥, 但并不难, 而且是学习后续那些有趣内容必备的基础知识.3.1 分配给套机字的 IP 地址 与 端口号IP 是Internet Protocol (网络协议) 的简写, 是为收发网络数据而分配给计算机的值. 端口号并非赋予计算机的值, 而是为区分程序中创建的套机字而分配给翻译 2020-05-24 16:57:05 · 359 阅读 · 0 评论 -
TCP/IP网络编程_第2章套接字类型与协议
第2章套接字类型与协议因为涉及套机字编程的基本内容, 所以第2章和第3章显得相对枯燥一些. 但本章内容是第4章介绍的实际网络编程基础, 希望各位反复精读.大家已经对套接字的概念有所理解, 本章将讲解套接字创建方法及不同套接字的特性. 在本章仅需了解创建套机字调用的socket 函数, 所以希望大家以轻松的心态开始学习.2.1 套接字协议及其数据传输特性“协议” 这个词给人的第一印象总是相当困难, 我在学生时代也是这么想. 但各位要慢慢熟悉"协议", 因为它几乎是网络编程的全部内容. 首先解析其定义.翻译 2020-05-23 10:44:40 · 349 阅读 · 0 评论 -
TCP/IP网络编程_1.3基于Windows平台的实现
1.3基于Windows平台的实现Windows 套接字(以下简称Winsocket) 大部分是参考BSD系列UNIX套接字设计的, 所以很多地方都跟Linux 套接字类型. 因此, 只需更改Linux 环境下编写好的一部分网络编程内容, 就能在Windows 平台下运行. 本书也会同时讲解Linux 和 Windows两大平台, 这不会给大家增加负担, 反而会减轻负担.同时学习Linux 和 Windows 的原因大多数项目都在Linux 系列的操作系统下开发服务端, 而大多数客户端是在Window翻译 2020-05-22 09:43:53 · 969 阅读 · 0 评论 -
TCPIP网络编程_1.2 基于Linux的文件操作
TCPIP网络编程_1.2 基于Linux的文件操作讨论套接字的过程中突然谈及文件也许有些奇怪. 但对Linux而言, socket 操作与文件操作没有区别, 因此有必要详细了解文件. 在Linux 世界里, socket 也被认为是文件的一种, 因此在网络数据传输中自然可以使用文件I/O 的相关的函数, Windows 则与 Linux 不同, 是要区分 socket 和文件的. 因此在 Windows中需要调用特殊的数据传输相关函数.底层文件访问(Low-Level File Access) 和 文翻译 2020-05-21 17:34:02 · 195 阅读 · 0 评论 -
第一章_理解网络编程和套接字
第一章_理解网络编程和套接字网络编程领域需要一定的操作系统和系统编程知识, 同时还需要理解好TCP/IP 网络数据传输协议. 这么说来, 网络编程的确需要一定的基础知识, 但相对其他领域, 它更有趣, 而且没有想象中这么难. 只要踏踏实实学习, 任何人都可以轻松进入网络编程的世界.深入细节前, 本章先帮助各位建立对本书的总体认识, 并简要了了解后面的内容. 希望通过本章的学习, 大家能对网络编程有初步了解, 摆脱对它的恐惧.1.1 理解网络编程和套接字学习c语言时, 一般会先利用printf函数和s翻译 2020-05-19 23:13:12 · 243 阅读 · 0 评论