WIN32 Socket API

       在Windows网络编程中,套接字接口主要有三种类型:

            1.stream socket (流式套接字)

            2.datagram socket (数据套接字)

            3.raw socket (原始套接字)

       <一> 初始化函数

            int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);

       <二> 创建套接字函数

            SOCKET socket(int af, int type, int protocol);

            [参数]
            af - 地址家族(通常使用:AF_INET)
            type - socket的种类:
               SOCK_STREAM : 用于TCP协议
               SOCK_DGRAM : 用于UDP协议
            protocol - 所使用的协议
          [返回值]
            当函数成功调用时返回一个新的SOCKET(Socket Descriptor)
            失败时返回INVALID_SOCKET.

       <三> 定义套接字后,需要为其指定本机地址,协议,和端口

                bind()函数将套接字绑定到一个已知的地址上,函数原型如下:

                int bind(SOCKET s,const struct sockaddr FAR *name,int namelen);
                [参数]
                s - 指向用Socket函数生成的Socket Descriptor
                addr - 指向Socket地址的指针
                namelen - 该地址的长度.
                [返回值]
               当函数成功调用时返回0
               调用失败时返回 SOCKET_ERROR

       <四> 当服务器端的socket对象绑定后,必须建立一个监听的队列来接收客户端的连接请求。
                调用listen()函数是服务器端的socket进入监听状态,并设定可以建立的最大连接数,

                目前最大值限定为5,最小1,函数原型如下:
                int listen(SOCKET s,int backlog);

       <五> connect()函数用于发送一个连接请求,函数原型如下:

                int connect(SOCKET s,const struct sockaddr FAR *name,int namelen);

                [参数]
               s - 指向用Socket函数生成的Socket Descriptor
               name - 指向服务器地址的指针
               namelen - 该地址的长度.
                [返回值]
               当函数成功调用时返回0
               调用失败时返回 SOCKET_ERROR

        <六> 当客户端提出连接请求时,服务器端要调用accept()函数接受客户端的连接请求。函数

                 原型如下:
                 SOCKET PASCAL FAR accept(SCOKET s,struct sockaddr FAR *addr,int FAR *addrlen);

        <七> 无论客户端还是服务器应用程序都用send()函数来向TCP连接的另一端发送数据。原型如下:
                 int PASCAL FAR send(SOCKET s,const char FAR *buf,int len,int flags);

                 不论客户端还是服务器应用程序都用recv()函数从TCP连接的另一端接收数据。原型如下:
                 int PASCAL FAR recv(SOCKET s,char FAR *buf,int len,int flags);

        <八> 应用程序在使用完套接字以后,需要将其关闭,并释放相关资源。closesocket()函数用于关
                毕一个描述符为s套接字,并释放分配给该套接字的资源,如果s涉及一个正在进行的连接则

                该连接被释放。原型如下:
                BOOL closesocket(SOCKET s);

        <九> 应用程序在使用完socket库后,要调用WSACleanup()hanshu来解除与socket库的绑定并且

                 释放socket库所占用的系统资源。函数原型如下:
                 int WSACleanup(void);

             注:pascal就是__stdcall,参数从右向左压栈,并由函数自己清空堆栈 Win3.x的FAR宏在Win32
                 里面无效。Win32里面都是32位的寄存器,没有FAR和NEAR之分,PASCAL和WINAPI,CALLBACK,
                 APIENTRY 一样,都是指参数的传递方式为__stdcall,而Ansi C默认的参数传递方式为__cdecl,
                 这些宏定义在windef.h里面。FAR 以前定义成far, 是指跨  segment 的存取,x86 在 virtual
                 mode 下 已无 segment 这个东西,所以 FAR 在32 bits VC的定义是空的。 PASCAL 早期定义是
                 pascal 是指函式左边的引数先於右边引数先传(push to stack)并且函式返回时stack的平衡由
                 函式来做(C标准是由 呼叫者平衡)。 这是早期    Winodws为了节省记忆体所使用的calling
                 convention。 现在VC应已不支援pascal呼叫方式。 APIENTRY是定义给一个 thread 的 entry的,
                 它的定义一直都是 和 WINAPI,而WINAPI 的定义是 FAR PASCAL,而FAR PASCAL 已作废。

                        

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Win32网络API是一组用于在Windows操作系统上进行网络编程的应用程序编程接口(API)。它提供了一系列函数和数据结构,用于实现网络通信、数据传输、网络协议处理等相关功能。 通过使用Win32网络API,开发人员可以创建客户端和服务器应用程序,实现网络套接字的创建、连接建立、数据发送和接收等操作。这些API还支持TCP/IP和UDP/IP等常见的网络协议,如HTTP、FTP等,使得程序能够与Internet上的其他计算机进行通信。 Win32网络API提供了一系列功能强大的函数,如socket函数用于创建套接字,bind函数用于绑定端口,listen函数用于监听连接请求等。它还提供了一些高级功能,如多线程编程支持,使得程序能够同时处理多个网络连接,并实现并发通信。 使用Win32网络API可以实现各种类型的网络应用程序,如网络游戏、实时聊天应用、网络文件传输等。开发人员可以根据具体需求选择适合的网络协议和API函数,以实现所需的功能。 总之,Win32网络API为Windows开发人员提供了强大而丰富的网络编程功能,使他们能够轻松地实现各种网络应用程序,并与其他计算机进行数据交换。 ### 回答2: Win32网络API是一组用于Windows操作系统的应用程序编程接口,它允许开发人员创建网络应用程序和实现与网络通信相关的功能。这些API包括各种网络协议的实现、套接字编程、网络管理和监控等功能。 Win32网络API提供了丰富的功能,例如创建和绑定套接字、监听和接受连接、发送和接收数据等。开发人员可以利用这些API创建网络应用程序,如网络游戏、聊天软件、文件传输工具等。 通过Win32网络API,开发人员可以实现各种网络协议,如TCP/IP、UDP、HTTP等。其提供了一系列的函数和结构体,用于创建和管理网络连接、发送和接收数据包、处理网络错误等。 另外,Win32网络API还提供了网络管理和监控的功能。开发人员可以使用这些API查询和配置网络接口、获取网络状态、监控网络流量等。这些功能使得开发人员可以更好地管理和维护网络应用程序。 总之,Win32网络API是一套强大而全面的工具,用于在Windows操作系统上开发网络应用程序。它提供了丰富的功能,使得开发人员能够实现各种网络通信和管理的需求。无论是开发个人应用还是企业级应用,Win32网络API都能够提供支持和便利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值