(一)helloworld

#include
<Windows.h>

    }

#include
<iostream>

         If the function return 0, 表示成功。

              *cout<<“you select cancel”<<endl*;

    }else{

   所谓windows编程就是指通过调用Windows
API来和操作系统交互的编程方式。API就是与操作系统交互的各种功能函数,MessageBox就是一个API,调用它就可以弹出一个对话框。

    serverAddress.sin_port =
htons(listen_port);

       *system*(“pause”);

        Sleep(3000);

       return  0;

        
Name:用于指向主机名缓冲区的指针,namelen: 缓冲区的大小。

       {

         并且需要使用静态链接库,

     欢迎来到windows编程的世界,先给我们的windows打个招呼吧:

    }

int  main()

    while(true){

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

 

{

    }else{

       if(iSelect==IDOK)

         WSAStartup函数完成对Winsock服务的初始化,因此需要调用WSAStartup函数。使用Socket程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数表示程序请求使用的Socket版本,高字节表示副版本,低字节表示主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数的时候,操作系统根据请求的Socket版本来搜索响应的Socket库,绑定到Socket库到应用程序中。在之后的程序中可以调用Socket库中的其他的socket函数。

       }else

        cout << “绑定套接字端口失败” << endl;

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

    if(pht==NULL){

}

    WSACleanup();// 完成清理工作

       {

        }

       }

 

using namespace  std;

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

#include <Windows.h>

        exit(-1);

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

 

    }

        SOCKET chatSocket;

 

        cout << “获取本地主机的Name失败:”<<WSAGetLastError()<< SOCKET_ERROR <<
endl;

 

        //cout << AF_INET <<
endl;

 

#include <process.h>

        exit(-1);

         参数介绍:

    }

        exit(-1);

 

         #include <Windows.h>

        cout << “创建套接字失败” << endl;

 

         int WSAStartup(WORD wVersionRequest,
LPWSADATA lpWSAData);

    }else{

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

   

        cout <<“监听失败” << WSAGetLastError() << endl;

        cout << WSAGetLastError() <<
endl;

 

    serverAddress.sin_family = AF_INET;

 

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

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

    }else{

    }else{

        cout << “获取本地主机的Name失败:”<<WSAGetLastError()<< SOCKET_ERROR <<
endl;

    }

        sockaddr_in clientAddress;

int main(){

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

 

 

        cout << “h_length:” <<
pht->h_length << endl;

        cout <<“本地主机的名字是:” << buf << endl;

         WSAStartup是Windows SockNDs Asynchronous(Windows 异步套接字) 的启动命令, windows下的网络编程软件Winsock1,
Winsock2的一个命令。

         ws2_32.lib对应的是ws2_32.dll,提供对于常见网络编程的API接口支持,使用其中的网络接口就需要将ws2_32.dll添加到工程,否则需要动态的加载ws2_32.dll。

    WSADATA wsa ;//
WSADATA 结构是用来保存函数WSAStartup 返回的Windows
socket初始化信息

        cout << “套接字初始化失败”<<  endl;

        cout << “h_addrtype:” << 
pht->h_addrtype << endl;

        cout << “套接字初始化成功” << endl;

    }

    char buf[255];

        cout << “h_length:” <<
pht->h_length << endl;

 

#include <iostream>

 

    return 0;

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

         需要使用in_addr 类型保存一个IP地址,并且需要将IP地址转换成为字符串的格式,使用的是const char * inet_ntoa(in_addr in); 将pht->h_addr_list[i] 转换成为(in_addr*)的指针,然后再通过指针获取器内容,转换成为字符串的形式。

3.2获取主机的IP
gethostbyname(const char* name);

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

        }else{

         函数原型: int
PASCAL FAR gethostname( char FAR * name, int namelen);

    char buf[255];

            cout <<inet_ntoa(addr) <<
endl;

    }else{

        cout << WSAGetLastError() <<
endl;

        cout << “h_name:”<<
pht->h_name << endl;

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

 

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

        exit(-1);

        cout << “套接字初始化失败”<<  endl;

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

 

            cout << “接受连接失败” << WSAGetLastError()<< endl;

            cout << “接受来自” << inet_ntoa(clientAddress.sin_addr)
<<“的连接”<< endl;

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

        cout << “h_aliases:” <<
pht->h_aliases << endl;

   

        cout << WSAGetLastError() <<
endl;

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

        Sleep(3000);

        cout << “套接字初始化成功” << endl;

        }

        Sleep(3000);

   

    WSACleanup();// 完成清理工作

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

#include <iostream>

hostent 是一个数据结构,保存从gethostbyname返回的信息,包括主机的IP地址类型IPV4,IPV6,主机的别名,主机的IP长度,h_addr_list[]

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

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

        int addrlen = sizeof(clientAddress);

                   lpWSAData: 指向一个WSADATA的数据结构的指针,用于接收Windows Sockets实现的细节。

}

    }

 

        cout << “h_aliases:” <<
pht->h_aliases << endl;

}

 

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

        cout << “yang” << endl;

            cout << “IP:”
<<inet_ntoa(addr) << endl;

using namespace std;

 

using namespace std;

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

    }else{

        cout << “h_addrtype:” << 
pht->h_addrtype << endl;

    }

    }else{

        }

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

            continue;

        Sleep(3000);

        exit(-1);

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

    }

1.首先网络编程使用C++,要引入一些库

        Sleep(3000);

3.常见的一些函数在WinSocket编程中使用的介绍

    hostent* pht = gethostbyname(buf);

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

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

    sockaddr_in  serverAddress;

    int listen_port = 8999;

         这里使用的是编译语句#pragma comment(lib,”ws2_32.lib”) 相当于将ws2_32.lib静态链接库加入到项目中,效果和添加引用是一样的。

#include <Windows.h>

int main(){

 

  1. WSAStartup 函数的介绍

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

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

        //cout << AF_INET <<
endl;

        cout <<“本地主机的名字是:” << buf << endl;

        cout << “h_name:”<<
pht->h_name << endl;

    return 0;

    WSADATA wsa ;//
WSADATA 结构是用来保存函数WSAStartup 返回的Windows
socket初始化信息

    if(pht==NULL){

    if(serverSocket == INVALID_SOCKET){

    }

        cout << WSAGetLastError() <<
endl;

         Return Value:无错误的话,返回0,反之返回对应的错误代码。