孙鑫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文件;
- 孙鑫VC++第14章网络编程
- 孙鑫VC学习(第14课网络编程,TCP/IP,UDP)
- 《VC++深入详解》学习笔记[11]——第14章 网络编程
- 孙鑫VC++第5章文本编程
- 第14章:网络编程(day20)
- 孙鑫VC++视频学习笔记之14:网络编程
- 第14课 网络编程
- 第14课 网络编程
- 第15章 网络编程
- 第22章 网络编程
- 第17章 网络编程
- 第13章:网络编程
- 第11章 网络编程
- 《孙鑫VC视频》- TCP网络编程
- 《孙鑫VC视频》- UDP网络编程
- 《孙鑫VC视频》- UDP网络编程
- 《孙鑫VC视频》- TCP网络编程
- vc网络编程入门
- cvMatchShapes函数使用
- mac开发检测网络状况改变
- 中存在5中原始数据类型
- 多线程下载
- Java 数据库操作
- 孙鑫VC++第14章网络编程
- biztalk 2010 架构
- 孙鑫VC++第15章多线程
- Mac OS X 开发模式: Enable Developer Mode on this Mac?
- 孙鑫VC++第16章线程同步与异步套接字编程
- Process阻塞问题
- hdu 4268 贪心
- Tomcat launch tomcat using security manager
- vlookup