当前位置:9992019银河国际 > 网络动态 > API正是与操作系统交互的各类功能函数,网络编

API正是与操作系统交互的各类功能函数,网络编

文章作者:网络动态 上传时间:2019-10-22

     招待来到windows编制程序的世界,先给大家的windows打个招呼吧跋山涉水的近义词

网络编制程序1. 套接字编程基本知识

#include <Windows.h>

1.第一网络编制程序使用C++,要引进一些库

#include <iostream>

         #include <Windows.h>

using namespace  std;

         并且要求利用静态链接库,

int  main()

         这里运用的是编写翻译语句#pragma comment(lib,"ws2_32.lib") 也就是将ws2_32.lib静态链接库插足到项目中,效果和增进引用是如出朝气蓬勃辙的。

{

         ws2_32.lib相应的是ws2_32.dll,提供对于相近网络编程的API接口协理,使用个中的互联网接口就须要将ws2_32.dll增添到工程,不然要求动态的加载ws2_32.dll。

       int iSelect=MessageBox(NULL,TEXT("你好,windows世界,我来了!"),TEXT("你好,世界"),MB_OKCANCEL);

  1. WSAStartup 函数的介绍

       if(iSelect==IDOK)

         WSAStartup是Windows SockNDs Asynchronous(Windows 异步套接字) 的起步命令, windows下的互连网编制程序软件Winsock1, Winsock2的二个命令。

       {

         WSAStartup函数完结对Winsock服务的初阶化,因而须求调用WSAStartup函数。使用Socket程序在选取Socket在此以前必得调用WSAStartup函数。该函数的首先个参数表示程序央求使用的Socket版本,高字节表示副版本,低字节表示主版本;操作系统利用第二个参数重返央浼的Socket的版本音信。当二个应用程序调用WSAStartup函数的时候,操作系统根据央浼的Socket版本来搜索响应的Socket库,绑定到Socket库到应用程序中。在其后的次序中能够调用Socket库中的其余的socket函数。

              *cout<<"you select ok "<<endl*;

         int WSAStartup(WORD wVersionRequest, LPWSADATA lpWSAData);

       }else

         参数介绍爬山涉水

       {

                   wVersionRequest: 四个双字节数值, 使用MAKEWOCRUISERD(2,2)生成;

              *cout<<"you select cancel"<<endl*;

                   lpWS威刚: 指向一个WSADATA的数据结构的指针,用于收纳Windows Sockets完毕的细节。

       }

         If the function return 0, 表示成功。

       *system*("pause");

         开启Windows Sock Asynchronous,对相应程序结束的时候,就应该关闭,WSACleanup()用于接触于Socket库的绑定并且释放掉Socket库所据有的系统财富。

       return  0;

3.常见的片段函数在WinSocket编制程序中央银行使的牵线

}

3.1 gethostname() // 获取本地主机的主机名

   所谓windows编制程序正是指通过调用Windows API来和操作系统交互的编制程序方式。API正是与操作系统交互的种种作用函数,MessageBox正是二个API,调用它就足以弹出三个对话框。

         函数原型爬山涉水 int PASCAL FARAV4 gethostname( char FA中华V * name, int namelen);

         Name:用于指向主机名缓冲区的指针,namelen爬山涉水 缓冲区的深浅。

         Return Value跋山涉水的近义词无不当的话,再次回到0,反之再次来到对应的错误代码。

#include <iostream>

#include <Windows.h>

using namespace std;

 

#pragma comment(lib,"ws2_32.lib")

int main(){

    WSADATA wsa ;// WSADATA 结构是用来保存函数WSAStartup 再次来到的Windows socket起初化音信

    if(WSAStartup(MAKEWORD(2,1),&wsa) != 0){

        cout << "套接字最早化战败"<<  endl;

        Sleep(3000);

        exit(-1);

    }else{

        cout << "套接字开端化成功" << endl;

    }

 

    char buf[255];

 

    if( gethostname(buf,sizeof(buf)) == SOCKET_ERROR  ){

        cout << "获取本地主机的Name战败:"<<WSAGetLastError()<< SOCKET_ERROR << endl;

    }else{

        cout <<"本地主机的名字是爬山涉水" << buf << endl;

    }

    WSACleanup();// 完成清总管业

    return 0;

}

3.2到手主机的IP gethostbyname(const char* name);

hostent 是四个数据结构,保存从gethostbyname再次回到的新闻,包含主机的IP地址类型IPV4,IPV6,主机的别称,主机的IP长度,h_addr_list[]

         必要动用in_addr 类型保存七个IP地址,并且要求将IP地址调换来为字符串的格式,使用的是const char * inet_ntoa(in_addr in); 将pht->h_addr_list[i] 转变到为(in_addr*)的指针,然后再经过指针获取器内容,调换来为字符串的情势。

hostent* pht = gethostbyname("www.google.com");

    if(pht==NULL){

        cout << WSAGetLastError() << endl;

    }else{

        //cout << AF_INET << endl;

        cout << "h_addrtype:" <<  pht->h_addrtype << endl;

        cout << "h_aliases:" << pht->h_aliases << endl;

        cout << "h_length:" << pht->h_length << endl;

        cout << "h_name:"<< pht->h_name << endl;

        for(int i = 0; pht->h_addr_list[i] != NULL;i++){

            in_addr addr = *(in_addr*) pht->h_addr_list[i];

            cout <<inet_ntoa(addr) << endl;

        }

    }

 

#include <iostream>

#include <Windows.h>

#include <process.h>

using namespace std;

 

 

 

#pragma comment(lib,"ws2_32.lib")

 

int main(){

    WSADATA wsa ;// WSADATA 结构是用来保存函数WSAStartup 重回的Windows socket开首化新闻

    if(WSAStartup(MAKEWORD(2,1),&wsa) != 0){

        cout << "套接字最初化失败"<<  endl;

        Sleep(3000);

        exit(-1);

    }else{

        cout << "套接字发轫化成功" << endl;

    }

 

    char buf[255];

 

    if( gethostname(buf,sizeof(buf)) == SOCKET_ERROR  ){

        cout << "获取本地主机的Name失利:"<<WSAGetLastError()<< SOCKET_ERROR << endl;

    }else{

        cout <<"本地主机的名字是跋山涉水的近义词" << buf << endl;

    }

   

    hostent* pht = gethostbyname(buf);

    if(pht==NULL){

        cout << WSAGetLastError() << endl;

    }else{

        //cout << AF_INET << endl;

        cout << "h_addrtype:" <<  pht->h_addrtype << endl;

        cout << "h_aliases:" << pht->h_aliases << endl;

        cout << "h_length:" << pht->h_length << endl;

        cout << "h_name:"<< pht->h_name << endl;

        for(int i = 0; pht->h_addr_list[i] != NULL;i++){

            in_addr addr = *(in_addr*) pht->h_addr_list[i];

            cout << "IP:" <<inet_ntoa(addr) << endl;

        }

    }

 

    SOCKET serverSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

    if(serverSocket == INVALID_SOCKET){

        cout << "创设套接字战败" << endl;

        cout << WSAGetLastError() << endl;

        Sleep(3000);

        exit(-1);

    }

 

    sockaddr_in  serverAddress;

    int listen_port = 8999;

    memset(&serverAddress,0,sizeof(serverAddress));

    serverAddress.sin_family = AF_INET;

    serverAddress.sin_port = htons(listen_port);

    serverAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

 

    if( bind(serverSocket,(sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR){

        cout << "绑定套接字端口败北" << endl;

        cout << WSAGetLastError() << endl;

        Sleep(3000);

        exit(-1);

    }else{

        cout << "成功绑定端口:" << listen_port << endl;

    }

 

    if( listen(serverSocket,SOMAXCONN) == SOCKET_ERROR){

        cout <<"监听战败" << WSAGetLastError() << endl;

 

        Sleep(3000);

        exit(-1);

    }else{

        cout << "成功监听端口:"<< listen_port  << endl;

    }

 

   

   

 

    while(true){

        cout << "yang" << endl;

        SOCKET chatSocket;

        sockaddr_in clientAddress;

        memset(&clientAddress,0,sizeof(clientAddress));

        int addrlen = sizeof(clientAddress);

        if( (chatSocket = accept(serverSocket,(sockaddr*)&clientAddress,&addrlen))== SOCKET_ERROR){

            cout << "接收连接退步" << WSAGetLastError()<< endl;

            continue;

        }else{

            cout << "接收来自" << inet_ntoa(clientAddress.sin_addr) <<"的连接"<< endl;

        }

 

 

    }

 

    WSACleanup();// 实现清理专门的学问

    return 0;

}

本文由9992019银河国际发布于网络动态,转载请注明出处:API正是与操作系统交互的各类功能函数,网络编

关键词: