Windows网络编程相关概念

* IP

IP服务是互联网的关键。IP提供数据包的寻址,路由,分片和重组。

* OSI七层模型

物理层:由计算机和网络介质组成,负责将数据编码成比特流,并以此方式在网络上传输。

数据链路层:负责准备物理层传输,修正传输中的错误,将数据封装成Frame。

网络层:管理网络地址,选择路由,定义数据封包(Packet)等。

传送层:将上次数据分段(Segment),提供端到端的传输,提供服务质量(Qos)等。

会话层:建立,管理,终止会话等。

表示层:将网络传输的内同转为为用户有意义的编码。

应用层:为操作系统或王丽坤应用程序提供访问网络服务的接口。

* TCP/IP模型

应用层:包含会话层,表示层和应用层。包括各种应用程序和协议,如HTTP,FTP等。

传送层:包括传输控制协议(TCP)和用户数据报协议(UDP)。

网络层:包含IP, ARP, RARP, ICMP等。IP提供一种不可靠的服务。

数据链路层:包含物理层和数据链路层。

IP的主要任务是将数据分割成许多较小的封包(packet).并且将这些包发送出去,IP属于无连接的通信协议,不保证每个包都准确无误的传递到目的地,至于封包如何传输,采用何种方式传输有上次协议控制,如TCP或者UDP。

* TCP,UDP区别

  TCP UDP
提供面向连接的服务,客户端和服务器端必须建立连接。提供的服务,客户端和服务器端不必建立连接,客户端可直接向服无连接务器端发送消息。
提供可靠服务,发送数据时要去对方返回一个确认,如果没收到确认,将自动重传。为数据进行排序,为每个发送的字节关联一个序列号,从而保证了数据的顺序。提供流量控制,告知对方它能够接收数据的字节数。不确保数据报能最终到达目的地,对数据报的发送不确认,不重发等。
速度比UDP慢,占用资源比UDP多。速度快,占用资源少。
* TCP的连接与终止

三次握手连接:

1.客户端想服务器端发起链接iu,此时客户端发送一个SYN字节。

2.服务器端向客户端发送SYN和对客户端的ACK。

3.客户端确认服务器的SYN。

四次握手终止连接:

1.终止方向对方发送一个FIN分节,表示数据传输完毕。

2.接收方收到FIN,向对方发送ACK.

3.接收方执行了关闭,再发送一个FIN.

4.原始发送方收到FIN后再向对方发送一个ACK.

SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。

* 端口

通用端口号(0-1023):这些端口绑定某些服务,通常表明服务的某种协议,如80是HTTP的端口,21是FTP的端口。

已注册的端口号(1024-49151):工一般程序使用,一般在这个范围选择端口号。

动态私有端口(49152-65535)

* socket

简单可以将socket理解为固定电话的插口,可以使用TCP或者UDP方式连接到这个电话插口上,在这个插口的另一方是另外是网络协议和负责传输的硬件,具体有操作系统内核完成。

struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};
sin_family:地址家族,必须为AF_INET。

sin_port:服务端口号.

sin_addr: in_add类型的IP地址。

sin_zero:填充该结构的大小,使之与SOCKADDR相同。
* 可能阻塞的函数为

1.输入操作:

rec(), recvfrom(), WSARecv(), WSARecvfrom().如果套接字缓冲区内没有数据可读,则调用线程在数据来临之前一直等待。

2.输出操作:

send(), sendto(), WSASend(), WSASendto(), 如果套接字缓冲区内没有可用空间,线程会一直睡眠直到有可用空间。

3.接受连接:

accept()和WSAAcept()。如果没有连接请求,线程会进入睡眠状态,

4.外出连接:

connect()和WSAConnect函数。对于TCP连接,在连接收到服务器应答之前,不会返回,意味着TCP连接至少等待客户端到服务器一次往返的时间。

* WSAAsyncSelect Function

使用时必须有一个相应的窗口可以接受消息。对发生网络事件的小结:

FD_READ事件:

当调用WSAAsyncSelect函数时,如果当前有可读数据时。

当数据到达并且没有发送FD_READ网络事件时。

调用recv或者recvform函数后,如果仍有可读数据时。

FD_WRITE事件:

当调用WSAAsyncSelect函数时,如果调用能够发送数据时。

调用connect或者accept函数后,当连接已经建立时。

调用send或者sendto函数,返回WSAEWOULDBLOCKE错误后,在此调用send或者sendto函数可能成功时。

FD_ACCEPT事件:

当调用WSAAsyncSelect函数时,如果当前有连接请求需要接受时。

当连接请求到达时,汗没有发送FD_ACCEPT网络事件。

调用accept函数后,如果还有另外的连接请求需要接受时。

FD_CONNECT事件

当调用WSAAsyncSelect函数时,如果当前一个链接已经建立时。

当调用connect函数后,建立连接完成时。

当调用WSAJoinLeaf函数后,加入操作完成时。

在面向连接的非阻塞套接字上,调用connect,WSAConnct或者WSAJoingLeaf函数后,尝试连接完成时,此时应用程序应该查看错误代码,确定连接是否成功。

FD_cLOSE时间

当调用WSAAsyncSelect函数时,套接字连接关闭时。

对方执行了从容关闭后,没有数据可读时,如果数据已经到达并且等待读取,FD_CLOSE时间不会被发送,直到所有的数据被发送。

调用shutdown函数执行从容关闭,对方应答FIN后,此时如果没有数据可读时。

对方结束了连接,并且lParam包含WASECONNRESET错误时。

* WSAAsyncSelect  WSAEvetnSelect Function

同一个套接字上多次调用WSAAsyncSelect或WSAEvetnSelect函数,后一次的调用将会取消前一次的调用效果,对多个事件的注册需用 | 运算符经行连接。

* 杂记

使用INVALID_SOCKET可以验证socket的正确性。

使用SOCKET_ERROR可以验证相关函数的返回值。


其实big endian是指低地址存放最高有效字节(MSB),而little endian则是低地址存放最低有效字节(LSB)。数字0x12345678表示如下:

Big Endian低地址 高地址 谢谢你的好意啊,真不必了。本来我o
----------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 12 | 34 | 56 | 78 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Little Endian低地址 高地址
----------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 78 | 56 | 34 | 12 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

采用big endian方式存储数据是符合我们人类的思维习惯的。

网络字节流采用 Big Endian的方式。ntohl()和ntohs()函数实现从网络字节顺序转换为主机字节顺序的功能。


WSAStartup()和WSACleanup()必须成对使用。

SOCKADDR结构因协议的不同而不同,被内核用于存储地址,大小为16字节,在TCP/IP下使用SOCKADDR_IN代替该结构。
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值