[Win32] Windows Sockets 2笔记(1)在开始之前

 本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/47998329

Winsock2(Windows Sockets 2)是Windows上的套接字,但是没有Raw Socket,从XP开始,应用程序就不能再使用完整的原始套接字了,只允许内核程序(比如设备驱动)使用。

但是如果我们只想进行TCP、UDP的网络通信,Winsock2不一定最简单(比如HTTP、FTP用wininet更简单),但一定能解决问题,如果想要自定义应用层协议,或者自己设计一个应用层协议,无疑Winsock2是最好的选择。

Windows内核协议栈是如何运作的我们无从得知,但是这对我们来说并不需要,因为我们只需关心Socket接口即可。数据的发送和接收由协议实现。

在开始之前,我希望大家能先来了解一下基本的网路知识:

1。TCP协议(传输控制协议)是一种面向连接的、可靠的协议,TCP协议有他自己的校检、超时重发机制,TCP注射也很难完成,简单说,通过TCP协议传输的数据是不需要进行完整性检验的,比如说我下载一个文件,难道还用担心文件数据缺失或不正确吗,当然前提是在没有hacker捣蛋的情况下。为什么SSL、HTTPS那么流行?虽然TCP协议是面向连接的、可靠的协议,但不代表它安全,TCP保证的是接收端能够完整地接收发送端的数据,他没有检测发送端是否真实的能力。(这里的发送端和接收端不是一次TCP连接的某一端,而是泛指,在一次TCP连接中,两个主机都即是发送端也是接收端)

2。UDP协议(用户数据报协议)是一种非连接、不可靠的协议,发送端只负责把数据发出去,至于说接收端能否收到就不管了。但UDP有一个特点,它可以广播或多播数据,而TCP是不能的。简单说,我可以将一份UDP数据报直接发送到子网内的每一台主机上。

3。IP协议(网际协议)是一种非连接、不可靠的协议,TCP、UDP基于IP,IP协议不可靠,可靠性只能由他的上层协议实现。

4。ICMP协议(Internet控制报文协议)大名鼎鼎的Ping程序,就是使用ICMP协议实现的,严格说ICMP协议是IP协议的子协议,也是基于IP协议的。

开启Winsock2的方法,方法几乎是死的:

首先包含头文件、定义要连接的库

#include <winsock2.h>
#pragma comment(lib , "Ws2_32.lib")

注意这个一定要写在Windows.h的前面,否则会出错。

开启Windows Socket 2:

	WORD wVersionRequested;
	WSADATA wsaData;
	wVersionRequested = MAKEWORD(2, 2);

	if (WSAStartup(wVersionRequested, &wsaData) != 0){
		MessageBox(NULL, TEXT("Winsock开启失败"), TEXT("错误"), MB_ICONERROR);
		return 1;
	}


来简单解释一下:

WSAStartup函数:

int WSAStartup(
  _In_  WORD      wVersionRequested,
  _Out_ LPWSADATA lpWSAData
);

用于开启Windows Socket 2
wVersionRequested:高序位字节指定版本号,低序位字节指定的主版本号。

lpWSAData:指向要接收 Windows 套接字实现的细节的 WSADATA 数据结构的指针。一般用不到。

返回值:如果成功,则 WSAStartup 函数返回零。否则,它将返回一个错误代码。WSAGetLastError 获取扩展代码。

WSACleanup函数:
int WSACleanup(void);
用于关闭Windows Socket 2


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows Sockets网络编程》是WindowsSockets网络编程领域公认的经典著作,由Windows Sockets2.0规范解释小组负责人亲自执笔,权威性毋庸置疑。它结合大量示例,对WindowsSockets规范进行了深刻地解读,系统讲解了WindowsSockets网络编程及其相关的概念、原理、主要命令、操作模式,以及开发技巧和可能的陷阱,从程序员的角度给出了大量的建议和最佳实践,是学习WindowsSockets网络编程不可多得的参考书。   全书分为三部分:第一部分(第1~6章),提供了翔实的背景知识和框架方面的概念,借助于此框架,读者可理解WinSock的具体细节,包括WindowsSockets概述、OSI网络参考模型、TCP/IP协议簇中的协议和可用的服务、WinSock网络应用程序的框架及其工作机制、WinSock的三种操作模式、socket通信机制等;第二部分(第7~12章),以FTP客户端实例为基础介绍了函数实例库,还介绍了客户端程序、服务器程序和DLL中间构件及它们的相应函数,并涵盖socket命令和选项及移植BSDSockets相关事项等;第三部分(第13~17章),介绍了应用程序调试技术和工具,针对应用编程中的陷阱的建议和措施,WinSockAPI的多种操作系统平台,WinSock规范的可选功能和WinSock规范2.0中的所有新功能。 译者序 序 前言 第1章 Windows Sockets概述 1.1 什么是Windows Sockets 1.2 Windows Sockets的发展历史 1.3 Windows Sockets的优势 1.3.1 Windows Sockets是一个开放的标准 1.3.2 Windows Sockets提供源代码可移植性 1.3.3 Windows Sockets支持动态链接 1.3.4 Windows Sockets的优点 1.4 Windows Sockets的前景 1.5 结论 第2章 Windows Sockets的概念 2.1 OSI网络模型 2.2 WinSock网络模型 2.2.1 信息与数据 2.2.2 应用协议 2.3 WinSock中的OSI层次 2.3.1 应用层 2.3.2 表示层 2.3.3 会话层 2.3.4 传输层 2.3.5 网络层 2.3.6 数据链路层 2.3.7 物理层 2.4 模块化的层次框 2.5 服务和协议 2.6 协议和API 第3章 TCP/IP协议服务 3.1 什么是TCP/IP 3.2 TCP/IP的发展历史 3.3 传输服务 3.3.1 无连接的服务:UDP 3.3.2 面向连接的服务:TCP 3.3.3 传输协议的选择:UDP与TCP的对比 3.4 网络服务 3.4.1 IP服务 3.4.2 ICMP服务 3.5 支持协议和服务 3.5.1 域名服务 3.5.2 地址解析协议 3.5.3 其他支持协议 3.6 TCP/IP的发展前景 第4章 网络应用程序工作机制 4.1 客户端-服务器模型 4.2 网络程序概览 4.3 socket的打开 4.4 socket的命名 4.4.1 sockaddr结构 4.4.2 sockaddr_in结构 4.4.3 端口号 4.4.4 本地IP地址 4.4.5 什么是socket名称 4.4.6 客户端socket名称是可选的 4.5 与另一个socket建立关联 4.5.1 服务器如何准备建立关联 4.5.2 客户端如何发起一个关联 4.5.3 服务器如何完成一个关联 4.6 socket之间的发送与接收 4.6.1 在“已连接的”socket上发送数据 4.6.2 在“无连接的”socket上发送数据 4.6.3 接收数据 4.6.4 socket解复用器中的关联 4.7 socket的关闭 4.7.1 closesocket 4.7.2 shutdown 4.8 客户端和服务器概览 第5章 操作模式 5.1 什么是操作模式 5.1.1 不挂机,等待:阻塞 5.1.2 挂机后再拨:非阻塞 5.1.3 请求对方回拨:异步 5.2 阻塞模式 5.2.1 阻塞socket 5.2.2 阻塞函数 5.2.3 伪阻塞的问题 5.2.4 阻塞钩子函数 5.2.5 阻塞情境 5.2.6 撤销阻塞操作 5.2.7 阻塞操作中的超时 5.2.8 无最少接收限制值 5.2.9 代码示例 5.3 非阻塞模式 5.3.1 怎样使socket成为非阻塞的 5.3.2 成功与失败不是绝对的 5.3.3 探询而非阻塞 5.3.4 显式地避让 5.3.5 代码示例 5.4 异步模式 5.4.1 认识异步函数 5.4.2 撤销异步操作 5.4.3 代码示例 5.4.4 AU_T

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值