没有合适的资源?快使用搜索试试~ 我知道了~
该文章主要讲述有关tcp的相关知识 当中包含有训练的内容
资源详情
资源评论
资源推荐
第1讲 基于 TCP 的程序设计
1.1 网络程序设计基础
1.1.1 TCP/IP 的分层协议
应用层
运输层
网络层
数据链路层
物理层
为了降低设计难度,大部分网络都以层的形式组织在一起,上层的功能依赖其下层实
现,下层的实现细节对上层是隐藏的,不相邻的层是互相不可见的。
应用层协议举例:HTTP、SMTP、FTP、DNS
为传输应用层信息而设 协议举例:TCP、UDP Socket 函数是定义在该层的编程接口
网络层负责将网络层封包从一个主机转移到另一个,确定数据的物理路径
协议举例:IP 协议,相应的路由协议
网络层包含了子网的操作,是懂得网络拓扑结构的最高层
将数据报移动到源地址到目的地址路径上的下一个节点
两种通信方式:
广播:将数据发送给所有相邻节点
点对点:比如用于 WAN 的 PPP 协议
链路层协议主要在网络适配器(网卡)中实现
物理层将链路层帧中的原始比特流从一个节点传送到下一个节点
协议举例:以太网协议 MAC LLC
TCP/IP 未定义该层协议
依赖所采用的传输介质
1.1.2 寻址方式:
在局域网中依赖 MAC 子层和 MAC 地址
广域网通讯中 IP 地址
1.1.3 网络程序的发展:
联机多用户程序设计
对等网络程序设计
Client/Server 程序设计
RPC 程序设计
Browser/Server 程序设计
分布式程序设计 Winsock 介绍
1.2 Winsock 程序设计
1.2.1 Winsock 简介
Windows Sockets 规范以 BSD Socket 接口为范例定义了一套 Micosoft Windows 下网络
编程接口。它不仅包 含 了 熟悉的 Berkeley Socket 风格 的 库函数; 也 包 含了一组 针 对
Windows 的扩展库函数,以使程序员能充分地利用 Windows 消息驱动机制进行编程。
Windows Socket 规范本意在于提供给应用程序开发者一套简单的 API,并让各家网络软
件供应商共同遵守。
在 一 个 特 定 版 本 Windows 的 基 础 上 , Windows Socket 也 定 义 了 一 个 二 进 制 接 口
(ABI),以此来保证应用 Windows Sockets API 的应用程序能够在任何网络软件供应商
的符合 Windows Socket 规范的实现上工作。
这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函
数调用和相关语义。遵守这套 Windows Sockets 规范的网络软件,我们称之为 Windows
Sockets 兼容的。
1.2.2 Socket 的类型
1. 流式套接字
最常用的套接字 提供面向连接的、无差错的、发送顺序一致的、包长度不限和非重复的网
络信息的传输 TCP 协议使用此类套接字
2. 数据报套接字
无连接的服务,以独立的数据报进行传输,不保证顺序性、可靠性和无重复性 UDP 采用
此种套接字
3. 原始套接字
提供对下层网络的通信协议的访问 主要用于开发新的协议或用于提取较隐蔽的功能
1.2.3 基于 TCP 的程序设计
1.2.4 关于 SOCKET 的 TCP 函数:
1.WinSock 的初始化和清除
Windows Socket 要 求 WinSock 程 序 使 用 两 个 与 Windows 有 关 的 函 数 , 即
套接字绑定
套接字进入监听状态
接受连接请求
收发数据
套接字的关闭
发起连接请求
收发数据
套接字的关闭
创建套接字
创建套接字
WSAStartup 和 WSACleanup 。 在 调 用 任 何 其 他 WinSock 函 数 以 前 , 必 须 先 调 用
WSAStartup 函数。对每个 WSAStartup 函数调用,程序必须在后面包括一个相应的
WSACleanup 函数调用。 WSAStartup 函数让你的程序指定要求的 Winsock API 版本,
并检索有关 WinSock 执行体的信息。当你的程序调用 WSAStartup 时,你的程序就和
WinSock.dll 开始了一个协凋工作。其函数原型为:
Result=WSAStartup(WINSOCK_VERSION,&wsaData)
其 中 的 常 量 WINSOCK_VERSION 指 明 WinSock 版 本 , 例 如 , OxOl01 表 示
WinSock 1.1 版。可以使用宏生成。如 MAKEWORD(1,1)表示 1.1 版本。wsaData 是
一个 WSADATA 变量。其原型为:
typedef struct WSAData{
WORD wVersion; //库文件建议应用程序使用的版本
WORD wHighVersion; //库文件支持的最高版本
//库描述字符串
char szDescription[WSADESCRIPTION_LEN+1];
//系统状态字符串
char szSystemStatus[WSASYS_STATUS_LEN+1];
//同时支持的最大套接字数量
unsigned short iMaxSockets;
//以下两个参数在 2.0 版中已废弃
unsigned short iMaxUdpDg;
char FAR* lpVendorInfo;
} WSDATA,FAR * LPWSADATA;
WSACleanup 函数原型为:
WSACleanup();
WSACleanup 函数对应 WSAStartup 函数。程序每次调用 WSAStartup 后,都必须
相 应 地 调 用 WSACleanup 函 数 。 WinSock 使 用 一 个 内 部 计 数 器 , 程 序 每 次 调 用
WSAStartup 时,WinSock 给计数器加 l。相反,程序每次调用 WSACleanup 函数时,
WinSock 对计数器减 1。最后的 WSACleanup 函数告诉 WinSock 进行清除工作。
当程序最后一次调用 WSACleanup 函数时,WinSock 将断开与所有现存字节流
Socket 的连接。但在调用 WSACleanup 以后,WinSock 还是会将已关闭的 Socket 中
未传送完的数据传送出去。
2. 建立套接字
SOCKET socket(
//用来指定套接字使用的地址格式,通常使用 AF_INET
int af,
//指定套接字的类型
int type,
//配合 type 参数使用,指定使用的协议类型
int protocol
)
套接字类型 type
SOCK_STREAM 流套接字,使用 tcp 提供的有连接的可靠的传输
SOCK_DGRAM 数据报套接字,使用 udp 提供无连接的不可靠的传输
SOCK_RAW 原始套接字,socket 不使用特定的协议区封装它,而由程序自行处理
数据报及协议首部
协议类型 protocol
配合 type 使用,值可以是 IPPROTO_TCP 等
当 type 指定为 SOCK_STREAM 或 SOCK_DGRAM 时,因为系统已明确使用 tcp 和 udp 来
工作,protocol 可指定为 0
3. 绑定 SOCKET
int bind(
SOCKET s; //套接字句柄
//要关联的本地地址
const struct sockaddr* name,
int namelen //地址的长度
)
Winsock 为了兼容多个协议,所采用的通用的寻址方式
struct sockaddr{
u_short sa_family;
char sa_data[14];
}
用于 TCP/IP 的 sockaddr
struct sockaddr_in {
//地址族(指定地址格式),设为 AF_INET
short sa_family;
u_short sin_port; //端口号
struct in_addr sin_addr; //IP 地址
char sin_zero[8]; //空子节,设为空
}
端口号通常分为三个范围
0 ~ 1023:由 IANA(Internet Assigned Numbers Authority)管理,保留为公共的服务使用
1024 ~ 49151:普通用户注册的端口号
49152 ~ 65535:动态或私有的端口号
得到端口号:u_short htons (u_short hostshort );
struct in_addr{
union{
struct {
u_char s_b1,s_b2,s_b3,s_b4;
} S_un_b;
struct {
u_short s_w1,s_w2;
} S_un_w;
u_long S_addr;
} S_un;
};
得到 IP 地址:unsigned long inet_addr(const char* cp);
剩余21页未读,继续阅读
弓永峰
- 粉丝: 101
- 资源: 40
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0