Windows网络编程笔记1
第一部分 传统网络API
传统的网络接口NetBIOS、重定向器、邮槽、命名管道等。
第一,NetBIOS(Network Basic Input/Output System, NetBIOS)“网络基本输入/输出系统”,其中T C P / I P和I P X / S P X的协议上实施N e t B I O S编程接口。
1、LANA 编号
LANA 编号是NetBIOS协议进行通信的保障,每个网卡都会至少有一个LANA编号,两台机器进行通信时必须保证LANA编号一致才能进行。
2、NetBIOS 名字
NetBIOS 名字 是一个长度16字符的字符串,在Win32环境中,针对每个可用的 LANA编号,每个进程都会为其维持一张NetBIOS名字表。
共有两种类型:唯一名字和组名。唯一名字是通过WINS进行确认的,组名则是在一个网络环境中一组IP和NetBIOS的集合,可对组进行多播。其中WINS解释如下:
WINS是Windows Internet Naming Server,即Windows Internet命名服务。它提供一个分布式数据库,能在路由网络的环境中动态地对IP地址和NETBios名的映射进行注册与查询。 WINS用来登记NetBIOS计算机名,并在需要时将它解析成为IP地址。WINS数据库是动态更新的。
计算机名和工作组名对应NetBIOS的唯一名字和组名
在Cmd下输入nbstat -n 也可以看到本机的NetBIOS本机名称表
其中的名称解释为
其中的组名标识符,我电脑上没什么组名,只有一个默认的组名WORKGROUP
3、NetBIOS 特性
NetBIOS 同时提供了“面向连接”服务以及“无连接”服务。
关于面向连接和无连接,我觉得用手机比喻特别好,面向连接就像打电话,首先拨号,然后建立一条虚拟的链路,就好象专线一样,在这个过程中,按照对方手机号(目的地址)首先寻找附近的基站,然后基站之间与基站之间建立连接(如同路由与路由及交换机之间的连接),最后再和两个手机互连(虚拟链路建立成功),这样,手机就拨通了(前提是对方必须在线),可以通话了。
而无连接就像发短信,首先你给个手机号(目的地址),然后发送短信(数据),注意这里不管对方手机时候关机、停机等,然后发送(发送完就不用管了),短信首先也是去基站,按照手机号(地址)选择转发路径,在基站之间转发,如果对方开机就立马送过去,否则就暂存起来,等一段时间(这个具体多少我也不清楚,但是肯定有个有效期的),在有效期内对方开机就会受到短信,过期作废。
4、NetBIOS API 只有一个
UCHAR Netbios(PNCB pNCB);//(现在才发现Win7不支持NetBIOS)
MSDN上说:[Netbios is not supported on Windows Vista, Windows Server 2008, and subsequent versions of the operating system]。
若想连接NetBIOS 应用,唯一需要的库是Netapi32.lib
注意:进行任何Netbios调用之前,不要一开始就填写结构内的各个成员,而应先将这个 NCB结构清零!
typedef struct _NCB {
UCHAR ncb_command;//这个是命令的类型,包括发送,连接,断开,添加。删除等。。。
UCHAR ncb_retcode;//
UCHAR ncb_lsn;//
UCHAR ncb_num;//
PUCHAR ncb_buffer;//
WORD ncb_length;//
UCHAR ncb_callname[NCBNAMSZ];//
UCHAR ncb_name[NCBNAMSZ];//
UCHAR ncb_rto;
UCHAR ncb_sto;
void (CALLBACK *ncb_post)( struct *NCB);
UCHAR ncb_lana_num;
UCHAR ncb_cmd_cplt;
UCHAR ncb_reserve[X];
HANDLE ncb_event;
} NCB, *PNCB;
成员介绍如下:
使用Netbios()函数可以实现类似socket的同步和异步通信。
使用举例:
int LanaEnum(LANA_ENUM *lenum)
{
NCB ncb;// ZeroMemory(&ncb,sizeof(NCB));//清空ncb
ncb.ncb_command = NCBENUM;//指定要选择的操作
ncb.ncb_buffer = (PUCHAR)lenum;//数据缓存
ncb.ncb_length = sizeof(LANA_ENUM);//数据长度
if (Netbios(&ncb) != NRC_GOODRET)//调用Netbios()函数,当返回值为NRC_GOODRET时表示函数执行成功
{
printf("ERROR:NetBIOS : NCBENUM :%d \n",ncb.ncb_retcode);
return ncb.ncb_retcode;//
}
return NRC_GOODRET;//
}
这个NetBIOS实现通信的过程和socket实现通信的过程有着惊人的一致,但是这个东西毕竟出现的很早了,并不适合现在的需求。估计很少会用到。
Windows网络编程笔记1的更多相关文章
- Windows网络编程笔记4 -- Winsock 协议相关知识
Win32平台上的Winsock编程,Winsock是一个与协议无关的接口.以下协议是我们需要了解的: 网络协议的特征包括: 1. 面向消息 2. 面向连接和无线接 3. 可靠性和次序性 4. ...
- Windows网络编程笔记6 --- WinSock I/O 控制方法
Windows提供了两种方式“套接字模式”和“套接字I/O模型”,可对一个套接字上的I/O行为加以控制.套接字模式用于决定在随一个套接字调用时,那些 Winsock函数的行为.其中的模型包括括sele ...
- Windows网络编程笔记5 -- 其他套接字
包括红外线套接字(IrSock).IPX/SPX 套接字.NetBIOS 套接字.AppleTalk 套接字.ATM 套接字等.对这些套接字进行简单介绍. 第一.红外线套接字(I r S o c k) ...
- Windows网络编程笔记3 ---- 邮槽和命名管道
邮槽和命名管道的使用方法也很简单,只需几个有限的函数就可以实现双方的通信. 第三.邮槽 邮槽----进程间通信机制. 通过邮槽客户进程可以将消息通过广播给一个或多个服务进程.这是一个单向通信机制,缺点 ...
- Windows网络编程笔记2
这一次看看重定向器和如何使用Netbios函数获取本机mac地址 5.获取Mac地址 利用NCBASTAT命令实现,适配器状态命令会返回一个 ADAPTER_STATUS结构,紧接着是大量 NAME_ ...
- Winsock网络编程笔记(1)----入门
今天第一次接触winsock网络编程,看的资料是Windows网络编程第二版.通过博客记住自己的看书笔记.. 在这里贴出第一个程序,虽然程序什么都没做,但以此作为入门,熟悉其网络编程风格.. #inc ...
- Linux网络编程笔记(修订版)
我的网络编程笔记, 因为最近又要做Linux下的网络编程,故重新修订, 其中一些内容参考了文末的链接及文章 1. 基本概念 2. 基本接口 2.1. 打开一个socket 2.2. 将 ...
- storysnail的Windows串口编程笔记
storysnail的Windows串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据 ...
- [转]Windows网络编程学习-面向连接的编程方式
直接附上原文链接:windows 网络编程学习-面向连接的编程方式
随机推荐
- 【Oracle】曾经的Oracle学习笔记(4-7)多表联合查询,子查询,动态条件查询
一.多表联合查询 二.子查询 三.动态条件查询 LESSON 4 Displaying Data from Multiple Tables------------------------------- ...
- 1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间; 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和; 3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时
1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间: 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时 ...
- Android(java)学习笔记104:Framework运行环境之启动SystemServer进程
1. SystemServer进程 SystemServer进程是zygote孵化出的第一个进程,该进程是从ZygoteInit.java的main函数中调用startSystemServe ...
- 【BZOJ3720】Gty的妹子树(主席树+时间分块)
点此看题面 大致题意: 给你一棵有根树,让你支持三种操作:询问某子树中大于\(x\)的值的个数,把某一节点值改成\(x\),添加一个父节点为\(u\).权值为\(x\)的节点. 关于此题做法 此题做法 ...
- .net网站的下载地址
.net4.0网址:http://www.crsky.com/soft/6959.htmlsql server r2: http://pan.baidu.com/share/link?shareid= ...
- python_52_函数返回值2
def test1(x,y): print(x,y) test1(1,2)#位置参数调用,按顺序来,与形参一一对应 test1(y=1,x=2)#输出为2 1,不是1 2.关键字参数调用按关键字,不按 ...
- STM32启动流程
启动文件主要工作: . 设置堆栈指针SP=_initial_sp . 设置PC指针=Reset_Handler . 配置系统时钟 . 配置外部SRAM用于程序变量等数据存储(可选) . 调用C库中的_ ...
- Luogu [P1334] 瑞瑞的木板(手写堆)
其实这个题完全不需要用手写堆,只需要一遍遍sort就行了…… 但是! 为了练习手写堆,还是用手写堆做了. 在做本题之前,如果你没有什么思路的话,建议先做Luogu的合并果子. 好,假设你已经做过了合并 ...
- Incorrect key file for table './xx_db/xx_table.MYI'; try to repair it
解决办法: 可以先运行 CHECK TABLE 表名 检查下是否存在错误. 然后运行 REPAIR TABLE 表名 进行修复.
- JQuery从服务器端取得数据绑定到dropdownlist(select)中
http://blog.csdn.net/gaofang2009/article/details/5840783 http://www.cnblogs.com/Mac_Hui/archive/2010 ...