• WINSOCK网络函数


    1. 头文件及库文件

    头文件:WINSOCK2.H

    库:WS2_32.LIB库

    如果是在WINCE中,不支持SOCK2,所以:

    头文件:WINSOCK.H

    库:WSOCK32.LIB

    如果从MSWSOCK.H中使用了扩展API,则需要链接MSWSOCK.DLL

    2. 初始化Winsock

    如果调用一个没有初始化过winsock库的相关socket函数,则返回SOCKET_ERROR,另外错误信息是:WSANOTINITIALISED;

    int WSAStartup(WORD wVersionRequeted, LPWSADATA lpWSAData);

    l wVersionRequested:指定加载的winsock库的版本;

    l lpWSAData:指向LPWSADATA结构的指针,填充启动参数;

    3. 错误检测

    常见的错误返回值时SOCKET_ERROR,该值是-1;

    若想获取具体错误信息,通过函数:

    int WSAGetLastError(void);

    当然,必须在winsock加载之后,才能调用该函数,如果在WSAStartup就出错,那就没得办法了。

    4. 创建套接字

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

    5. 面向连接的通信

    绑定套接字:

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

    监听:

    int listen(SOCKET s, int backlog);

    接受连接:

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

    连接:

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

    6. 数据传输

    数据发送:

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

    接收数据:

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

    7. 中断连接

    为了保证通信方能够收到应用程序发出的所有数据,对于一个好的应用程序来说,应该通知接收端“不再发送数据”。同样,通信方也该如此。

    int shutdown(SOCKET s, int how);

    从容关闭,可以选择关闭项类型:SD_RECEIVE、SD_SEND、SD_BOTH;

    直接关闭套接字:

    int closesocket(SOCKET s);

    8. 无连接通信

    和面向连接不同,不必调用listen和accept,最简单的方式就是:

    int recvfrom(SOCKET s, char FAR* buf, int len, int flags, struct sockaddr FAR* from, int FAR* fromlen);

    而客户端则直接发送数据:

    int sendto(SOCKET s, const char FAR* buf, int len, int flags, const struct sockaddr FAR* to, int tolen);

  • 相关阅读:
    boost编译中的细节问题
    geos编译问题
    安装pytorch的细节记录
    Qt学习-模仿Qt实现一个colorbutton
    BOOST内存管理-intrusive_ptr
    GEOS使用记录
    matlab添加永久路径
    关于浮点数的取值范围以及精度的问题
    vs2010中使用命令行参数
    sprintf fprintf EOF scanf 的返回值 深拷贝与浅拷贝
  • 原文地址:https://www.cnblogs.com/davidsguo008/p/3593336.html
Copyright © 2020-2023  润新知