套接字编程基本知识

     招待来到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版本,高字节表示副版本,低字节表示主版本;操作系统利用第4个参数重回央求的Socket的版本音讯。当贰个应用程序调用WSAStartup函数的时候,操作系统依照须求的Socket版本来寻觅响应的Socket库,绑定到Socket库到应用程序中。在此后的次序中可以调用Socket库中的别的的socket函数。

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

         int WSAStartup(WORD wVersionRequest,
LPWSADATA lpWSAData);

       }else

         参数介绍:

       {

                  
wVersionRequest: 二个双字节数值, 使用MAKEWOOdysseyD(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 FARubicon gethostname( char FA帕杰罗 * 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;

发表评论

电子邮件地址不会被公开。 必填项已用*标注