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

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

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

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

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

#include <winsock2.h>
#include <stdio.h>

void main(void)
{
    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:栏中添加即可)

   上面代码中有个注释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编程时的感觉,学了几天,进步是很快,但一段时间不碰,都不想去碰了...导致html好多标签的属性和参数都忘了,windows编程中部分函数的使用细节也可能忘了...浅尝辄止)

时间: 2025-01-02 19:18:34

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

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

转自:http://blog.sina.com.cn/s/blog_5f0cf7bd0100c9oa.html OpenGL官方网站(英文) http://www.opengl.org 下面我将对Windows下的OpenGL编程进行简单介绍. 第一步:选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的.但这里我们选择VC++ 6.0作为学习OpenGL的环境. 第二步:安装GL

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

一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们. Accept():让服务器接收客户的连接请求. Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接. Clos

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

一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入 数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们. Accept():让服务器接收客户的连接请求. Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接. Clo

Windows平台cocos2d-x 3.0 android开发环境

cocos2d-x升级到3.0后变化不小,除了API的变化(主要是函数和类名称变化,以及使用了C++11的不少特性,function/bind, lamda, std::thread-),创建和编译工程也做了一些简化调整.本文主要讨论一下cocos2d-x3.0 在android平台开发的环境设置及工程创建编译流程. 1.   初始设置 除了2.x所需要的python,jdk, android sdk和ndk之外,还需要部署apache-ant. 1)      在path中设置好java环境变

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

VC++6.0 下配置 pthread库2010年12月12日 星期日 13:14VC下的pthread多线程编程     转载 #include <stdio.h>#include <stdlib.h>#include <pthread.h> void* tprocess1(void* args){       int i=1;       while(i<=10){            printf("process1:%d\n",i);

windows下C++网络编程入门

winsocket分为流套接字和数据报套接字.winsocket编程一般都采用C/S模式.在server端的流程一般如下:1.初始化winsocket2.建立socket3.与本机进行邦定(bind)4.开始监听(listen)5.然后与客户端建立连接(accept)6.然后与客户端进行通信(send, recv)7.当通信完成以后,关闭连接8.释放winsocket的有关资源在Client端的流程一般如下:1.初始化winsocket2.建立socket3.与本机进行邦定(bind)4.与服务

VC++网络编程学习笔记

Visual C++网络编程是指用户使用MFC类库(微软基础类库)在VC编译器中,以实现网络应用.用户通过VC编程实现的网络软件可以在网络中不同的计算机之间互传文件,图像等信息.基础知识: 如果用户要进行VC网络编程,则必须首先了解计算机网络通信的基本框架和工作原理.在两台或多台计算机之间进行网络通信时,其通信的双方还必须遵循相同的通信原则好数据格式. 1.OSI七层网络模型OSI网络模型是一个开放式系统互联的参考模型. 发送信息的计算机 接收信息的计算机 7.应用层 7.应用层 表示计算机网络

网络编程学习小结

几种网络编程方式: ISAPI.CGI.WinInet.Winsock 它们之间的差别: 1)  ISAPI主要是开发基于浏览器client与server端程序.效率比CGI方式高,并且也扩展了CGI没有的一些功能.(基于TCP/IP模型中的应用层) 2)  CGI主要是开发基于浏览器client与server端程序.(基于TCP/IP模型中的应用层) 3)  WinInet主要是开发client程序.(基于TCP/IP模型中的应用层) 4)  Winsock主要是基于socket来开发clie

linux网络编程学习笔记之五 -----并发机制与线程?

进程线程分配方式 简述下常见的进程和线程分配方式:(好吧,我仅仅是举几个样例作为笔记...并发的水太深了,不敢妄谈...) 1.进程线程预分配 简言之,当I/O开销大于计算开销且并发量较大时,为了节省每次都要创建和销毁进程和线程的开销.能够在请求到达前预先进行分配. 2.进程线程延迟分配 预分配节省了处理时的负担,但操作系统管理这些进程线程也会带来一定的开销.由此,有个折中的方法是,当某个处理须要花费较长时间的时候,我们创建一个并发的进程或线程来处理该请求.实现也非常easy,在主线程中定时,定