MFC 中常用的函数

  • 套接字函数介绍

      套接字函数通常封装在Ws2_32.dll动态连接库中,头文件是winsock2.h,因此用户需要引用头文件和链接库

          #include “winsock.h”  //引用头文件

          #pragma comment(lib,”ws2_32.lib”)  //链接库文件

    此外,使用套接库函数前需要初始化套接字,使用函数WSAStartup()实现

    例如:  WSADATA  wsd;  //定义WSADATA对象

            WSAStartup(MAKEWORD(2,2),&wsd);     //初始化套接字

    下面介绍一些套接字函数

     

     

    1:WSAStartup函数:用于初始化动态连接库,而且不可或缺

          int WSAStartup(WORD wVersionRequested,LPWSADATA lpWDADATA)

          //用法参见前面几行代码

     

     

    2:socket函数:用于创建一个套接字

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

           Af:表示一个地址家族,通常是AF_INET

           type:表示套接字类型。SOCK_STREAM:创建面向连接的流式套接字

               SOCK_DGRAM:表示创建面向无连接的数据报套接字,SOCK_RAW:表示创原始套接

    protocol:表示所用的协议,不指定时可以设置为0

    函数的返回值是创建的套接字句柄

     

     

    3:bind函数:用于将套接字绑定到指定的端口和地址上

            int bind(SOCKET s,const struct sockadddr FAR * name, int namelen)

                s:表示套接字标志

                 name:是一个sockaddr结构指针,包含了端口和地址

                 namelen:确定name缓冲区长度

    返回值:成功返回0;失败返回SOCKET_ERROR

     

     

    4: listen函数:用于将套接字设置为监听模式。对于流式套接字必须是该模式

         Int listen(SOCKET s, int backlog)

             Backlog: 表示等待连接的最大队列长度

     

     

    5:accept函数:用于接收客户端的链接

       SOCKET accept(SOCKET s, struct sockaddr FAR *addr, int FAR * addlen)

             S:一个套接字标志,应该处于监听状态

             addr:包含一组客户端的端口和地址信息

             addlen:用于接收参数addr的长度

          返回值:一个新的套接字,它对应于已经接受的客户端连接,对于该客户端的所有后

    续操作,都应该使用这个新的套接字

     

     

    6:closesocket函数:关闭套接字

           int closesocket(SOCKET s);

     

     

    7:connect函数:用于发送一个连续请求

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

            name:表示套接字想链接的主机地址和端口号

            namelen:表示缓冲区长度

        成功返回0,走则为SOCKET_ERROR

     

    8:htons函数:将一个16位的无符号短整型数据由主机排列方式转换成网络排列方式

           u_short htons(u_short hostshort)

                  hostshort:表示一个主机排列方式的无符号整形数据

      返回值是一个网络排序的无符号短整型数据

     

     

    9:htonl函数:表示将一个主机排列的长整型数据有主机排列转换成网络排列

    u_long htonl(u_long hostlong);

     

    10:inet_addr函数:将一个由字符串表示的地址转换成32位的无符号长整型数据

       Unsigned long inet_addr(const char FAR * cp);

          cp:表示一个IP地址的字符串

    返回一个32位无符号长整数

     

    11:recv函数:用于从面向连接的套接字中接收数据

          int recv(SOCKET s, char FAR *buf,int len, int flags)

                   buf:接收数据的缓冲区

                  len:buf的长度

                  flags表示函数的调用方式  MSG_PEEK:表示查看传来的数据

                          MSG_OOB表示用来处理外带数据

     

    12;send函数:用于在面向连接方式的套接字间发送数据

         int send(SOCKET s, const char FAR * buf, int len, int flags)

           buf要发送数据缓冲区的大小

           flags函数的调用方式

     

    13:select函数:用来检查一个或多个套接字是否处于可读、可写或错误状态

       Int select(int nfds,fd_set FAR *readfds, fd_set FAR *writefds,fd_set FAR * exceptfds, const struct timeval FAR * timeout)

              nfds:无实际意义

              readfds表示一组可读套接字

              writefds表示一组可写套接字

              exceptfds表示一组被检查有错误的套接字

              timeout表示函数的等待时间

     

    14:WSACleanup函数:用于释放从Ws2_32.dll动态连接库初始化分配的资源

                     Int WSACleanup(void)

     

    15:WSAAsyncSelect函数,用于将网络中发生的事情关联到窗口的某个消息中

       Int WSAAsyncSelect(SOCKET s,HWND hwnd,unsigned int wMsg,long lEvent)

                   Hwnd:表示接收消息的窗口句柄

                  wMsg表示窗口接受来自套接字中的消息

                  lEvent表示网络中发生的事

     

    16:ioctlsocket函数:用于设置套接字的I/O模式

         Int ioctlsocket(SOCKET  s, long cmd, u_long FAR * argp)

               Cmd:操作命令:如果是FIONBIO,argp为0时,表示禁止非阻塞模式,argp为非0时表示设置是非阻塞模式。如果是FIONREAD表示从套接字中可以读取的数据量。SIOCATMARK         表示是否所有的外带数据都已被写入。

               argp表示命令参数

     

    17WSAGetOverlappedResult函数,用于获取重叠I/O操作完成时的结果

     BOOL WSAGetOverlappedResult(SOCKET s, LPWSAOVERLAPPED lpOverlapped, LPDWORD lpcbTransfer,BOOL fWait,LPDWORD lpdwFlags)

          S:表示套接字

          lpOverlapped:标志一个I/O重叠操作的结构指针

          lpcbTransfer:表示本次操作实际接受或发送的字节数

          fWait: TRUE表示除非I/O操作完成,否则函数不会返回,FALSE表示如果函数进行中,则函数立即返回FALSE

          lpdwFlags:表示一组标记,通常来自于WSARecv函数的lpFlags参数

     

    18CreateIoCompletionPort函数,表示用于创建完成端口对象

    HANDLE CreareIoCompletionPort(HANDLE FileHandle, HANDLE ExitingCompetionPort,ULONG_PTR CompletionKey,DWORD NumberOfConcurrentThread);

            FileHandle:表示完成端口的关联对象。如果是创建完成端口,参数为INVALID_HANDLE_VALUE;

             ExitingCompetionPort:表示关联FileHandle对象的完成端口,如果创建完成端口,参数是NULL

            CompletionKey:表示端口的完成键值,用户指定一个自定义的结构指针,用于表示关联完成端口的附加数据

            NumberOfConcurrentThread:表示允许同时运行的用户线程的最大数量,通常设置为0,表示系统根据CPU数量确定

你可能感兴趣的:(MFC 中常用的函数)