最近学习数据结构和算法学得有点累了(貌似也没那么累...)...找了本网络编程翻了翻当做打一个小基础吧,打算一边继续学习数据结构一边也看看网络编程相关的...

简单的第一次尝试,就大致梳理一下看书+自己理解的东西。

1.首先是对Winsock的一点介绍:Winsock是一种标准的API(应用程序编程接口),主要用于网络中的数据通信,它允许两个应用程序在同一台机器上或通过网络相互通信。需要注意的是Winsock和协议无关,使用Winsock编程接口,应用程序可通过普通网络协议如:TCP/IP(网络通讯协议)或IPX(互联网数据包交换协议)协议建立通信。

2.然后是VC++6.0下网络编程的工程项目的基本创建,先贴一段代码:

#include <winsock2.h>
#include <stdio.h> void main()
{
WSADATA wsaData;//注释1
int Ret; //初始化winsock版本2.2
if((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
{
//如果winsock没有加载,调用WSAStartup()函数将会返回一个SOCKET_ERROR的错误代码
printf("WSAStartup failed with error %d\n", Ret);
return ;
} if(WSACleanup() == SOCKET_ERROR)
{  //WSACleanup()函数可以释放所有由winsock分配的资源,并取消这个应用程序挂起的winsock调用
printf("WSACleanup failed with error %d\n", WSAGetLastError());
}
}

因为该程序的主函数入口是main(),所以建立工程时应选择win32 Console Application,然后我们编写的是winsock2.h的应用程序,需要链接到WS2_32.LIB库;如果是winsock.h时,需要使用WSOCK32.LIB;如果是MSWSOCK.H(这个是用于微软专用编程扩展的)时,还需链接MSWSOCK.DLL。(以上除DLL文件外都在VC++6.0 中的 project -> setting -> link 中的 Object/library modules:栏中添加即可,补充:用code blocks编写网络程序也需要链接到libws2_32.a、libwsock32.a库,位置在软件界面中的setting->compiler settings->Linker settings->Link libraries栏中添加)

   上面代码中有个注释1,稍微解释一下:

       初始化winsock时(也就是调用函数WSAStartup()加载winsock)用与加载的版本有关的信息和一个指向WSADATA结构的指针来填充该结构:

typedef struct WSAData {
WORD wVersion;
WORD wHighVersion;
char szDescription[WSADESCRIPTION_LEN + 1];
char szSystemStatus[WSASYS_STATUS_LEN + 1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR * lpVendorInfo;
}WSADATA, * LPWSADATA;

       我们可以不太在意这个结构的具体细节,但至少应该知道怎么编写程序来填充它。如果想知道WSAData结构体中各个成员的含义和作用可以去看书《windows网络编程》第一章前面有很详细的解释。

  最后,第一次的网络编程学习就先总结成这样了,我主要就是用一段错误处理的代码来测试头文件和了解如何开始编写网络编程的程序,有了简单的入门会清晰很多。个人感觉这篇总结还是有些许收获的。

Windows平台VC++ 6.0 下的网络编程学习 - 简单的测试winsock.h头文件的更多相关文章

  1. Linux下TCP网络编程与基于Windows下C#socket编程间通信

    一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...

  2. VC++6.0 下配置 pthread库2010年12月12日 星期日 13:14VC下的pthread多线程编程 转载

    VC++6.0 下配置 pthread库2010年12月12日 星期日 13:14VC下的pthread多线程编程     转载 #include <stdio.h>#include &l ...

  3. VC++ 6.0下OpengGL配置以及glut配置

    转自:http://blog.sina.com.cn/s/blog_5f0cf7bd0100c9oa.html OpenGL官方网站(英文) http://www.opengl.org 下面我将对Wi ...

  4. VS2008和VC6.0下使用pthread.h头文件

    原文:http://www.cppblog.com/liquidx/archive/2009/06/16/87811.html 要在windows环境下使用 #include <pthread. ...

  5. 与众不同 windows phone (37) - 8.0 文件系统: StorageFolder, StorageFile, 通过 Uri 引用文件, 获取 SD 卡中的文件

    [源码下载] 与众不同 windows phone (37) - 8.0 文件系统: StorageFolder, StorageFile, 通过 Uri 引用文件, 获取 SD 卡中的文件 作者:w ...

  6. [转]Windows网络编程学习-面向连接的编程方式

    直接附上原文链接:windows 网络编程学习-面向连接的编程方式

  7. 转:MFC网络编程学习

    要学习好网路编程,主要看以下几个方面: 1.掌握概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等. 2.在实际Windows网络通信软件开发中,异步非阻 ...

  8. 《转》MFC网络编程学习

    原地址:http://www.cnblogs.com/renyuan/archive/2013/06/04/3117006.html要学习好网路编程,主要看以下几个方面: 1.掌握概念,诸如:同步(S ...

  9. C,C++网络编程学习简明指南

    C,C++网络编程学习简明指南 1. 扎实的C,C++基础知识 参考资料<C程序设计>,<C++ primer>. 2. TCP/IP协议 经典书是:W.Richard Ste ...

随机推荐

  1. DNS辅助

    DNS服务原理详解 DNS:Domain Name Service,域名解析服务 监听端口:udp/53,tcp/53 应用程序:bind 根域:. 一级域: 组织域:.com, .org, .net ...

  2. Elasticsearch系列---shard内部原理

    概要 本篇我们来看看shard内部的一些操作原理,了解一下人家是怎么玩的. 倒排索引 倒排索引的结构,是非常适合用来做搜索的,Elasticsearch会为索引的每个index为analyzed的字段 ...

  3. CodeForces Gym 100213F Counterfeit Money

    CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...

  4. CSS--box

    width is content width height is content height set margin and padding zero leads box to the same wi ...

  5. Educational Codeforces Round 78 (Rated for Div. 2)E(构造,DFS)

    DFS,把和当前结点相连的点全都括在当前结点左右区间里,它们的左端点依次++,然后对这些结点进行DFS,优先对左端点更大的进行DFS,这样它右端点会先括起来,和它同层的结点(后DFS的那些)的区间会把 ...

  6. 【Python redis】

    目录 基本用法 连接池 基本命令 String Hash List set "下载:pip install redis @ *** 基本用法 redis库提供两个类,Redis和Strict ...

  7. html2canvas.js 图片不显示

    html2canvas.js 图片不显示 在服务器端打开 就可以, 但是在本地就不显示图片. 查找百度,是因为图片不能跨域. 在给非编程人员使用的时候,建议把所有的图片,转化为base64,就可以直接 ...

  8. Python格式化字符串知多少

    字符串格式化相当于字符串模板.也就是说,如果一个字符串有一部分是固定的,而另一部分是动态变化的,那么就可以将固定的部分做成模板,然后那些动态变化的部分使用字符串格式化操作符(%) 替换.如一句问候语: ...

  9. 用python实现文件加密功能

    生活中,有时候我们需要对一些重要的文件进行加密,Python 提供了诸如 hashlib,base64 等便于使用的加密库. 但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加密程序,从而 ...

  10. 红帽RHCE培训-课程2笔记目录

    目录 1 kickstart自动安装 DHCP+TFTP(syslinux) +FTP +KICKSTART ~/anaconda-ks.cfg system-config-kickstart 2 g ...