Socket相关函数

WinSock API相关函数

    winsock提供了很多套接字函数,用户通过这些函数可以很容易的进行网络编程。

    1、socket函数

    socket函数用户创建一个套接字。

    SOCKET socket(

        int af,                      //标识一个地址家族,通常为AF_INET

        int type,                 //标识套接字类型;SOCK_STREAM,表示流式套接字;SOCK_DGRAM,表示数据报套接字

        int protocol           //标识一个特殊的协议被用于这个套接字,通常为0,表示采用默认的TCP/IP协议。

    );

    2、accept函数

    accept函数是用于接收客户端的连接请求。返回值是一个新的套接字,它对应于已经接受的客户端连接,对于该客户端的所有后续操作,都应使用这个新的套接字。

    SOCKET accept(

        SOCKET s,                                            //是一个套接字,它应该处于监听状态

        struct sockaddr FAR* addr,                //是一个sockaddr结构体指针,包含一组客户端的端口号和ip地址信息

        int FAR* addrlen                                 //接收addr的长度

    )

    3、bind函数

    bind函数用于将套接字绑定到一个已知的地址上。如果函数执行成功,返回0;否则返回SOCKET_ERROR

    int bind(

        SOCKET s,                                                 //是一个套接字

        const struct sockaddr FAR* name,          //该参数,包含了要绑定的端口号和ip地址

        int namelen                                             //确定缓冲区的长度

    );

    在定义一个套接字后,需要用bind函数为其指定本机地址、协议和端口号。

    例如,创建一个套接字,将其绑定在3010端口上,其代码如下:

    int port = 3010;

    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

    sockaddr_in addr;

    addr.sin_family = AF_INET;     //内部网络协议TCP/UDP等

    addr.sin_port = htons(port);   //端口号

    addr.sin_addr.s_addr = htonl(INADDR_ANY);

    if(bind(s,(LPSOCKADDR)&addr,sizeof(addr)) == 0)

    {

        MessageBox("成功");

    }

    4、closesocket函数

    closesocket函数用于关闭某个套接字。

    int closesocket(

        SOCKET s;           //标识一个套接字

    );

    5、connect函数

    connect函数用于发送一个连接请求,如果函数执行成功,返回0,否则返回SOCKET_ERROR。用户可以通过WSAGetLastError得到其错误描述。

    int connect(

        SOCKET s,                                               //标识一个套接字

        const struct sockaddr FAR* name,        //套接字想要连接的主机地址和端口号

        int namelen                                           //name缓冲区的长度

    );

    6、htons函数

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

    u_short htons(

        u_short hostshort              //一个主机排列方式的无符号短整型数据

    )

    7、htonl函数

    htonl函数将一个32位的无符号长整型数据有主机排列方式转换为网络排列方式。

    u_long htonl(

        u_long hostlong               //一个主机排列方式的无符号长整型数据

    )

    8、inet_addr函数

    inet_addr函数将一个由字符串标识的地址转换为32位的无符号长整型数据。

    unsigned long inet_addr(

        const char FAR* cp         //一个表示ip地址的字符串

    )

    9、listen函数

    listen函数用于将套接字置于监听模式。

    int listen(

        SOCKET s,               //套接字

        int backlog            //表示等待连接的最大队列长度。例如,如果backlog=3,此时有4个客户端同时f发出连接请求,那么

                                     //前3个会放置在等待队列中,第4个会得到错误信息。

    )

    10、recv函数 

    recv函数用于从连接的套接字中返回数据。

    int recv(

        SOCKET s,                //标识一个套接字

        char FAR* buf,         //接收数据的缓冲区

        int len,                     //buf的长度

        int flags                   //表示函数的调用方式;MSG_PEEK_ 用来查看传来的数据,在序列前端的数据会被复制到

                                       //返回的缓冲区中,但这个数据不会从序列中移走;MSG_OOB_ 用来处理Out_Of_Band数据

    )

    11、select函数

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

    int select(

        int nfds,                               //没有实际意义,只是为了和UNIX下的套接字兼容

        fd_set FAR* readfds,           //标识一组被检查可读的套接字

        fd_set FAR* writefds,          //标识一组被检查可写的套接字

        fd_set FAR* exceptfds,        //被检查有错误的套接字

        const struct timeval FAR* timeout             //标识函数的等待时间

    )

    12、send函数

    send函数在已经建立连接的套接字上发送数据。

    int send(

        SOCKET s,                               //标识一个套接字

        const char FAR* buf,              //存放要发送数据的缓冲区

        int len,                                   //标识缓冲区长度

        int flags                                //标识函数的调用方式

    )

    13、WSAStartup函数

    WSAStartup函数用于初始化WS2_32动态库,它应该是应用程序第一调用的windows socket函数,用于确定windows socket使用的版本。

    int WSAStartup(

        WORD wVersionRequested,           //标识调用使用的windows socket的版本,高字节记录修订版本,低字节记录主版本

                                                                //例如,Windows socket的版本为2.1,则高字节记录1,低字节记录2。

        LPWSADATA lpWSAData                //记录Windows socket的详细信息

    )

    下面的代码用于确定windows socket使用的版本

    WSADATA wsd;

    WSAStartUp(MAKEWORD(2,2),&wsd);

    14、WSACleanup函数

    WSACleanup和WSAStartup是相对的,用于终止使用WS2_32动态库。

    int WSACleanup(void);

    说明:当windows socket使用完成时,应调用该函数释放分配给应用程序或动态库的资源。

    15、WSAAsyncSelect函数

    WSAAsyncSelect函数用于将网络中发生的事件关联到窗口的某个消息中。

    int WSAAsyncSelect(

        SOCKET s,                               //标识套接字

        HWND hWnd,                        //标识窗口句柄

        unsigned int  wMsg,              //标识窗口消息

        long lEvent                             //标识网络中的事件

    )

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值