您的位置:永利集团登录网址 > 网络安全 > 操作系统实验及代码(全),操作系统实验代码

操作系统实验及代码(全),操作系统实验代码

2019-11-29 09:16

     迎接来到windows编制程序的世界,先给大家的windows打个招呼吧:

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

操作系统实验及代码(全),操作系统实验代码

操作系统是计算机有关职业的一门极度首要的专门的职业课,但实验课的时候很几人不知底代码应该怎么写,这里贴出博主使用过的大器晚成有个别,亲测可行。 

#include <Windows.h>

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

难题1:Windows进程的创造与销毁

履新时间:2017-10-26

剧情及供给:

① 通晓Windows进度的成立和销毁API的调用方法;编制程序代码,在程序中开创和销毁一个Word进度;

② 能够挂起和激活被制程的主线程;

③ 通过Windows进度微型机查看系统经过列表的转移。

实验指点:

①开立进程的API

BOOL CreateProcess(

  LPCTSTR lpApplicationName,

  LPTSTR lpCommandLine,

  LPSECURITY_ATTRIBUTES lpProcessAttributes,

  LPSECURITY_ATTRIBUTES lpThreadAttributes,

  BOOL bInheritHandles,

  DWORD dwCreationFlags,

  LPVOID lpEnvironment,

  LPCTSTR lpCurrentDirectory,

  LPSTARTUPINFO lpStartupInfo,

  LPPROCESS_INFORMATION lpProcessInformation

);

例程:

 1 void main( VOID ){
 2     STARTUPINFO si;
 3     PROCESS_INFORMATION pi;
 4     ZeroMemory( &si, sizeof(si) );
 5     si.cb = sizeof(si);
 6     ZeroMemory( &pi, sizeof(pi) );
 7     // Start the child process. 
 8     if( !CreateProcess( NULL, // No module name (use command line). 
 9         "MyChildProcess", // Command line. 
10         NULL,             // Process handle not inheritable. 
11         NULL,             // Thread handle not inheritable. 
12         FALSE,            // Set handle inheritance to FALSE. 
13         0,                // No creation flags. 
14         NULL,             // Use parent's environment block. 
15         NULL,             // Use parent's starting directory. 
16         &si,              // Pointer to STARTUPINFO structure.
17         &pi )             // Pointer to PROCESS_INFORMATION structure.
18         ) {
19             ErrorExit( "CreateProcess failed." );
20     }
21     // Wait until child process exits.
22     WaitForSingleObject( pi.hProcess, INFINITE );
23     // Close process and thread handles. 
24     CloseHandle( pi.hProcess );
25     CloseHandle( pi.hThread );
26 }

销毁进程API

BOOL TerminateProcess(

  HANDLE hProcess,

  UINT uExitCode

);

③ 挂起进度的主线程API

DWORD SuspendThread(

  HANDLE hThread

);

④激活进程的主线程API

DWORD ResumeThread(

  HANDLE hThread

);

⑤历程查看器

1 #include<iostream> 2 #include<windows.h> 3 using namespace std; 4 void main( VOID ) 5 { 6 STARTUPINFO si; 7 PROCESS_INFORMATION pi; 8 /** 9 * 这里填个人的word可执行文件的路径10 * ps:""须要开展转义 11 **/ 12 TCHAR szCommandLine[]=TEXT("D:\Microsoft Office\Office14\WINWORD.EXE"); 13 ZeroMemory(&si, sizeof(si) ); 14 si.cb= sizeof(si); 15 ZeroMemory(&pi, sizeof(pi) ); 16 if(!CreateProcess( NULL, szCommandLine, NULL,NULL, FALSE,0,NULL, NULL,&si,&pi 卡塔尔国 卡塔尔 17 { 18 fprintf(stderr,"进度创设失败!"卡塔尔(英语:State of Qatar); 19 } 20 int x; 21 while(1卡塔尔国 22 { 23 cout << "请输入要接纳的操作:n1:成立进程n2:销毁进度n3:挂起经过n4:激活进度n0:退出n"; 24 cin >> x; 25 switch(x卡塔尔国 26 { 27 case 1: 28 if(CreateProcess( NULL, szCommandLine, NULL,NULL, FALSE,0,NULL, NULL,&si,&pi 卡塔尔(英语:State of Qatar) 卡塔尔(英语:State of Qatar) 29 fprintf(stderr,"进度成立成功!"卡塔尔(英语:State of Qatar); 30 else 31 cout << "进程创造失败!"<<endl; 32 break; 33 case 2: 34 if(TerminateProcess(pi.hProcess,0卡塔尔卡塔尔 35 cout<<"销毁进程成功"<<endl; 36 else 37 cout<<"销毁战败!"<<endl; 38 break; 39 case 3: 40 if(SuspendThread(pi.hThread卡塔尔卡塔尔(قطر‎ 41 cout<<"挂起进度成功"<<endl; 42 else 43 cout<<"挂起战败"<<endl; 44 break; 45 case 4: 46 if(ResumeThread(pi.hThread卡塔尔(英语:State of Qatar)卡塔尔(英语:State of Qatar) 47 cout<<"激活进度成功"<<endl; 48 else 49 cout<<"激活败北"<<endl; 50 break; 51 case 0: 52 exit(0卡塔尔(英语:State of Qatar); 53 default: 54 cout<<"输入有误不正确"<<endl; 55 } 56 } 57 }

 

不停改革中!!!

 

作者:耑新新,发布于  博客园

转发请证明出处,应接邮件调换:[email protected]

操作系统是Computer有关规范的一门特别重要的专门的职业课,但实验课的时候相当多人不领悟代码应...

#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: 贰个双字节数值, 使用MAKEWOTucsonD(2,2卡塔尔国生成;

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

                   lpWSSanDisk: 指向四个WSADATA的数据构造的指针,用于收纳Windows Sockets完结的内部景况。

       }

         If the function return 0, 表示成功。

       *system*("pause");

         开启Windows Sock Asynchronous,对应当程序甘休的时候,就应该关闭,WSACleanup(卡塔尔用于接触于Socket库的绑定并且释放掉Socket库所占领的系统能源。

       return  0;

3.大规模的有个别函数在WinSocket编制程序中利用的介绍

}

3.1 gethostname(卡塔尔(英语:State of Qatar) // 获取当地主机的主机名

   所谓windows编制程序正是指通过调用Windows API来和操作系统交互作用的编制程序情势。API便是与操作系统交互的各样功用函数,MessageBox就是多少个API,调用它就可以弹出一个对话框。

         函数原型: int PASCAL FAHaval gethostname( char FAOdyssey * 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(卡塔尔(英语:State of Qatar)<< 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(卡塔尔(英语:State of Qatar)<< 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(卡塔尔(英语:State of Qatar)<< endl;

            continue;

        }else{

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

        }

 

 

    }

 

    WSACleanup(卡塔尔(قطر‎;// 完结清监护人业

    return 0;

}

本文由永利集团登录网址发布于网络安全,转载请注明出处:操作系统实验及代码(全),操作系统实验代码

关键词: