孙鑫VC++第14章网络编程

来源:互联网 发布:骁龙处理器 windows 10 编辑:程序博客网 时间:2024/06/04 18:44

 

                                                        第14章  网络编程

 

 

1.      在发送数据时,除了指定接收数据的主机IP地址外,还要指定端口号;

 

2.      七层网络协议:

 

1.      物理层:提供二进制传输,确定在通信道上如何传输比特流;

2.      数据链路层:提供介质访问,加强物理层的传输功能,建立一条无差错的传输线路;

3.      网络层:提供IP寻址和路由。网络层负责找出最佳的传输线路;

4.      传输层:为源端主机到目的端主机提供可靠的数据传输服务;

5.      会话层:在两个相互通信的应用程序直接建立、组织和协调其相互直接的通信;

6.      表示层:处理被传送数据的表示问题,即信息的语法和语义;

7.      应用层:为用户的网络应用程序提供网络通信的服务;

 

 

 

3.      通过DSN服务就可以将这个域名解析为它多对应的IP地址,通过IP地址就可以访问新浪网的主机了;

4.      利用TCP协议进行通信时,首先要通过三步握手,以建立通信双方的连接;

 

 

5.      数据封装:对等层协议之间交换的信息单元统称为“协议数据单元(PDU,Protocol Data Unit)”,

 

加入头部或者尾部:头部的数据中含有完成数据传输所需要的控制信息;

 

 

6.      端口:

 

端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区),传输的数据都是从这个端口输出的;

 

端口号跟协议有关;

 

我们在编写网络应用程序时,要为程序指定1024以上的端口号;1024以下为系统所保留;

 

7.      网络字节顺序:在网络协议中需要指定网络字节顺序,因为在网络不同主机间进行通信时,要统一采用网络字节顺序;

 

8.      套接字的类型:

 

1.      流式套接字:基于TCP协议实现的;

2.      数据报式套接字:基于UDP协议实现的;

3.      原始套接字;

 

 

9.      基于TCP(面向连接)的Socket编程;

 

服务器端:

1.      创建套接字(socket);

2.      将套接字绑定到一个本地地址和端口上(bind)

3.      将套接字设为监听模式,准备接受客户端请求(listen);

4.      等待客户请求到来,当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept);

5.      用返回的套接字和客户端进行通信(send/recv);

6.      返回,等待另一个客户的请求;

7.      关闭套接字。

 

 

 

 

客户端程序:

 

1.      创建套接字(socket);

2.      向服务器发出连接请求(connect);

3.      和服务器端进行通信(send/recv);

4.      关闭套接字;

 

注意:客户端不需要bind函数;

 

 

 

10.  基于UDP(面向无连接)的socket编程;

 

服务器端也叫接收端,他的服务器端和客户端这种概念不是很强,我们把服务器端,即先启动的一段称为接收端,发送数据的一段为客户端。

 

 

接收端程序的编写:

 

1.      创建套接字(socket);

2.      将套接字绑定到一个本地地址和端口上(bind);

3.      等待接受数据(recvfrom)

4.      关闭套接字;

 

 

客户端的编写:

 

1.      创建套接字(socket);

2.      想服务器发送数据(sendto);

3.      关闭套接字;

 

 

 

11.  相关函数:

 

1.      WSAStartup函数:在利用套接字编程时,第一步需要加载套接字库;

对于每一个WSAStartup函数成功调用(即成功加载WinSock动态库后),在最后都对应一个WSAClearUp调用,以便释放为该应用程序分配的资源,终止对WinSock动态库的使用;

        

2.      SOCKETsocket(int af,int type,int protocol);

第一个参数指定地址族,对于TCP/IP协议的套接字,它只能是AF_INET

第二个参数指定Socket类型:SOCK_STREAM流式套接字,SOCK_DGRAM数据报套接字;

第三个参数指定为0,自动选择协议方法;

        

 

3.      sockaddr这个地址结构是为所有地址家族准的,这个结构可能会随使用的网络协议不同而不同,所以要第三个参数指定地址结构的长度;

 

sockaddr是按网络字节顺序表示的,在基于TCP/IP的socket编辑过程中,可以用sockaddr_in结构替换sockaddr,以方便我们填写地址信息;

 

                  

                   另外,sockaddr_in结构中的sin_addr成员的类型是in_addr;

 

4.      如果我们要让套接字使用多个IP中的一个地址,就必须指定实际地址,

Inet_addr()来实现,参数要一个字符串(192.168.1.1),返回一个u_long类型是数值;

 

                  

            Inet_ntoa函数会完成相反的转换,它接受一个in_addr结构体类型的参数并返回一个IP地址字符串;

 

 

5.      Intlisten(SOCKET s, int backlog);

第二个参数是等待连接队列的最大长度;可设置为SOMAXCONN

这个值是设置等待连接队列的最大长度,而不是在一个端口上同时可以进行连接的数目;

 

 

6.      WindowsSockets的htonl函数将一个u_long类型的值从主机自己顺序转换为TCP/IP网络字节顺序;

 

 

 

12.需要在工程/设置,link选项卡上的对象/库模板上添加ws2_32.lib文件;

 

原创粉丝点击