2022年C语言网络编程 .pdf
《2022年C语言网络编程 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言网络编程 .pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言的学习,一般的方式是,先学C,然后是 C+,最好还要有汇编语言和微机原理基础,然后才是Visual C+ 。这样的方式,对学习者来说,要花费很多时间和耐力。而在学校教学中,也没有时间深入学习Windows 编程的实用技术了。其实, 具有了 C语言基础后, 再有一些基本的C+类的概念, 就可以直接学习Windows C编程了。一、走近Windows C 语言很多语言都把显示一个“Hello,World!”做为第一个入门程序, C 语言的第一个程序是这样的:#include main() printf(“Hello,World!”); 如果把 main 函数写成带参数的main 函数,应该是
2、:#include main(int arge,char *argv) printf(“Hello,World!”); Windows C 的第一个程序和这个程序在形式和原理上都是一致的,只是有两点不同: 1. 主函数接收的形参不只是命令行中的字符串的个数和字符串的首地址。 2. C语言的很多函数在Windows C中都可以继续使用,但象printf()屏幕显示等函数就不能继续使用了。因为 Windows是多任务操作系统,屏幕已不再为某一个应用程序所独有, Windows C应用程序要显示字符串,需要使用Windows 提供的 API 函数,开自己的窗口下面是一个最简单的,显示“Hello,W
3、orld!”的Windows C 程序:#include APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) MessageBox(NULL,Hello,World!,第一个 Windows C程序,MB_OK|MB_ICONASTERISK); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 13 页 - - - - - - - - - 主
4、函数的形参有四个: 1) Hinstance:接收程序运行时当前实例的句柄; 2) HprivInstance:前一个实例的句柄; 3) LpCmdLine :程序命令行指针; 4) NcmdShow :一个用来指定窗口显示方式的整数。这几个参数的使用我们会在深入的学习中介绍的。显示 Hello,Word!字符串,我们使用了一个MessageBox函数,这个函数会在屏幕上显示一个对话框,它的原型是:int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UNIT uType) 四个参数分别是: 1) HWnd :父窗口的句柄; 2)
5、LpText:要显示字符串的指针; 3) LpCaption:对话框标题字符串的指针; 4) UType :显示在对话框上的小图标的类型。使用这个函数要包含windows.h 头文件。调试一下,怎么样?窗口上弹出了一个“第一个Windows C 程序”对话框,上面有一行字:“ Hello,World!”。世界真的很美好啊!深入编程:在 C语言中,函数的声明,如果没有指明返回值类型,缺省值为void ,这个程序的主函数就没有返回值。不过,在 Windows 编程时,我们最好养成个好习惯,指明函数的返回值类型,因为在C+中,函数返回值类型是不可以缺省的。而我们在Windows C编程时,还是会用到
6、 C+ 的一些概念,这样做,有利于以后深入地学习。规范一点的程序应该是这样的:#include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 13 页 - - - - - - - - - int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) MessageBox(NULL,Hello,World!,第一个 Windows C程序,MB
7、_OK|MB_ICONASTERISK); return 0; 这里,我们声明的类型为int型,并且返回一个值0,这样的函数就可以使用在复杂一点的函数调用中了。在这一节中,我们有几处都提到了句柄的概念,句柄和指针的概念不同,它是作为操作系统内部索引表中的一个值来使用的,这样可以防止应用程序直接访问名对象的内部结构,体现了Windows 资源管理的优越性。譬如说, 一个窗口找开之后,好对应内存中的一个内存块,这个窗口所在的内存快地址往往会由操作系统做动态的调整,但其却不会随之变化。不过,通过它可以访问这个窗口,所以在使用的时候,可以把它当做指针一样看待。二、获取本地计算机的主机名和IP 地址和
8、C语言一样,函数是Windows C 编程的最基本的单位。不过,Windows C 主要使用API 函数,而网络编程则主要使用Winsock 提供的 API 函数。 Winsock 是 90 年代初,为了方便网络编程,由Microsoft联合了其他几家公司共同制定的一套WINDOWS 下的网络编程接口, 它是通过C语言的动态链接库方式提供给用户及软件开发者的,主要由winsock.h头文件和动态链接库winsock.dll组成,目前有两个版本:Winsock1.1 和 Winsock2.0 。在 Win32 平台上,访问众多的基层网络协议,Winsock 是首选接口。用 Visual C+6.
9、0编译 Windows C 程序,使用Winsock API函数时,首先要把wsock32.lib添加到它的库模块中,否刚在链接的时候,会出现“error LNK2001 ”错误。添加 wsock32.lib的具体步骤是:打开工程菜单,选择设置,在弹出的Project settings对话框中,点击link选项卡,然后在对象/ 库模块文本框中添加wsock32.lib。最简单的网络编程是获取本机的主机名和IP 地址,这个程序使用了WSAStart()、WSAClenaup()、gethostname ()、 gethostbyname ()四个 winsock API函数 , 这四个函数的功能
10、和使用方法介绍如下: 1 WSAStartup(): 【函数原型】int PASCAL FAR WSAStartup(WORD wVersionRequired, LPWSADATA 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 13 页 - - - - - - - - - lpWSAData); 【使用说明】每一个使用winsock 的应用程序, 都必须进行WSAStart 函数调用, 并且只有在调用成功之后才能使用其它的winsock 网络操作函数。 WVersio
11、nRequired:表示欲使用的insock版本,这是一个WORD 类型的整数,它的高位字节定义的是次版本号,低位字节定义的是主版本号。 LpWSAData: 是一个指向WSADATA 资料的指针。这个资料我们一般不使用。返回值:调用成功返回0;否则,返回出错信息。 2 WSAClenaup(): 【函数原型】int PASCAL FAR WSACleanup(void); 【使用说明】 winsock使用后,要调用SACleanup 函数关闭网络设备,以便释放其占用的资源。 3 gethostname() 【函数原型】int PASCAL FAR gethostname (char FAR
12、* name, int namelen); 【使用说明】该函数可以获取本地主机的主机名,其中: name: 用于指向所获取的主机名的缓冲区的指针。 Namelen:缓冲区的大小,以字节为单位。返回值:若无错误,返回0;否则,返回错误代吗。 4 gethostbyname() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 13 页 - - - - - - - - - 【函数原型】struct hostent FAR * PASCAL FAR gethostbyname(c
13、onst char FAR * name); 【使用说明】该函数可以从主机名数据库中得到对应的“主机”。该函数唯一的参数name就是前面调用函数gethostname()得到的主机名。若无错误,刚返回一个指向hostent结构的批针,它可以标识一个“主机”列表。 Hostent结构定义如下:Struct hostent char FAR * h_name; char FAR FAR * h_aliases; short h_addrtype; char FAR FAR * h_addr_list; 其中: h_name:主机名地址(PC )。 h_aliases:一个由主机备用名组成的空中止数
14、组。 H_addrtype :返回地址的类型,对于Winsock, 这个域总是PF_INET。 H_lenth :每个地址的长度(字节数),对应于PF_INET域应该为4。 H_addr_list: 应该以空指针结尾的主机地址的列表,返回的地址是以网络顺序排列的。其中, h_addr_list0存放的就是本地主机的4 个字节的IP 地址,即: h_addr_list00.h_addr_list01.h_addr_list02.h_addr_list03 一个简单的用消息框显示主机名和IP 地址的源程序如下:#include int WSA_return; WSADATA WSAData; 名师
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C语言网络编程 2022 语言 网络 编程
限制150内