精华内容
下载资源
问答
  • windows控制台编程(实用) 对于研究Windows编程的朋友可以看看!
  • 掌握Visual Studio控制台应用编程的基本方法 掌握Windows Sockets DLL的初始化和释放方法 掌握Windows Sockets API调用的一般步骤 使用Windows Sockets的API函数获得指定机器的信息 (包括主机名、服务名、IP地址) ...

    【实验目的】
    掌握Visual Studio控制台应用编程的基本方法
    掌握Windows Sockets DLL的初始化和释放方法
    掌握Windows Sockets API调用的一般步骤
    使用Windows Sockets的API函数获得指定机器的信息
    (包括主机名、服务名、IP地址)

    Winsocket代码:

    #define _WINSOCK_DEPRECATED_NO_WARNINGS
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <stdio.h>
    #include <windows.h>
    #pragma comment(lib, "ws2_32.lib") //链接静态库
    
    int main(int argc, char** argv)
    {
    
    	//-----------------------------------------
    	// Declare and initialize variables
    	WSADATA wsaData;
    	int iResult;
    
    	DWORD dwError;
    	int i = 0;
    
    	struct hostent* remoteHost;//定义host entry结构体指针变量,定义见书p48。
    	char* host_name;
    	struct in_addr addr; //以各种形式存放4个字节的IPv4地址
    
    	char** pAlias; //定义别名列表指针变量
    
    	// Validate the parameters
    	if (argc != 2) {           //为何argc要等于2?,程序运行时每个参数分别是什么?
    		printf("usage: GetHostIP hostname\n"); //提示程序运行时需要输入主机名作为参数
    		return 1;
    	}
    	// Initialize Winsock
    	iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);//与操作系统确认支持的WinSock版本
    	if (iResult != 0) {
    		printf("WSAStartup failed: %d\n", iResult);
    		return 1;
    	}
    
    	host_name = argv[1]; //提取用户输入的主机名
    
    
    	printf("Calling gethostbyname with %s\n", host_name);
    	remoteHost = gethostbyname(host_name);
    	//获取主机的信息存放在hostent结构体中。该函数调用DNS系统来获取对应域名或主机名的相关信息,可以通过Wireshark抓包来进行验证。
    
    		//对返回结果进行判断
    	if (remoteHost == NULL) {  //报错,返回。
    		dwError = WSAGetLastError();
    		if (dwError != 0) {
    			if (dwError == WSAHOST_NOT_FOUND) {
    				printf("Host not found\n");
    				return 1;
    			}
    			else if (dwError == WSANO_DATA) {
    				printf("No data record found\n");
    				return 1;
    			}
    			else {
    				printf("Function failed with error: %ld\n", dwError);
    				return 1;
    			}
    		}
    	}
    	else {  //依次显示获取的主机名称、多个别名、地址类型、地址长度、地址列表
    		printf("Function returned:\n");
    		printf("\tOfficial name: %s\n", remoteHost->h_name);//显示主机名称
    		for (pAlias = remoteHost->h_aliases; *pAlias != 0; pAlias++) { //循环显示别名
    			printf("\tAlternate name #%d: %s\n", ++i, *pAlias);
    		}
    		printf("\tAddress type: ");
    		switch (remoteHost->h_addrtype) {
    		case AF_INET:
    			printf("AF_INET\n"); //显示地址类型
    			break;
    		case AF_NETBIOS:
    			printf("AF_NETBIOS\n");
    			break;
    		default:
    			printf(" %d\n", remoteHost->h_addrtype);
    			break;
    		}
    		printf("\tAddress length: %d\n", remoteHost->h_length);//显示地址长度
    
    		i = 0;
    		if (remoteHost->h_addrtype == AF_INET)
    		{
    			while (remoteHost->h_addr_list[i] != 0) {  //循环显示主机地址
    				addr.s_addr = *(u_long*)remoteHost->h_addr_list[i++];
    				printf("\tIP Address #%d: %s\n", i, inet_ntoa(addr));//将地址转换成点分十进制显示。
    			}
    		}
    		else if (remoteHost->h_addrtype == AF_NETBIOS)
    		{
    			printf("NETBIOS address was returned\n");
    		}
    	}
    	iResult = WSACleanup();//与操作系统确认支持的WinSock版本
    	if (iResult != 0) {
    		printf("WSACleanup failed: %d\n", iResult);
    		return 1;
    	}
    
    	return 0;
    }
    

    更改命令行参数:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    执行结果:
    在这里插入图片描述
    通过调用接口函数getservbyport()获取结构体信息struct servent*
    代码展示:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <windows.h>		// 此头文件放在<winsock2.h>或<ws2tcpip.h>之后
    #pragma comment(lib, "ws2_32.lib") //连接静态库
    
    
    int main(int argc, char** argv)
    {
    	WSADATA wsaData;		// 创建WSADATA的对象,存放socket版本号等信息
    	int iResult;			// 接收WSAStarup()函数的返回值
    
    	struct servent* remoteServ;
    
    	/* -------------------------*/
    	// 注册套接字
    	iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);//与操作系统确认支持的WinSock版本
    	if (iResult != 0) {
    		printf("WSAStartup failed: %d\n", iResult);
    		return 1;
    	}
    
    
    	short num = 1;
    
    	printf("打印端口服务内容:\n");
    	while (num < (unsigned short)-1)	// 65535
    	{
    		remoteServ = getservbyport(htons((u_short)num), "tcp");	// 服务端口,按网络字节顺序排列
    		if (NULL == remoteServ);// printf("error %d ,please continue.\n", num);
    		else {
    			printf("服务名: %s \n", remoteServ->s_name);
    			printf("端口号: %d \n", ntohs((u_short)remoteServ->s_port));	//端口号按网络字节顺序返回
    			printf("协议名: %s \n\n", remoteServ->s_proto);
    		}
    		num++;
    	}
    
    	/* -------------------------*/
    	// 释放资源
    	iResult = WSACleanup();
    	if (iResult != 0) {
    		printf("WSACleanup failed: %d\n", iResult);
    		return 1;
    	}
    
    	return 0;
    }
    

    执行结果:
    在这里插入图片描述

    展开全文
  • 想必很多同学从开始学习C++的HelloWorld开始就已经接触到了控制台编程,有时候会遇到一些在控制台上的高级操作,比如有的程序按下Ctrl+C时会提示是否退出而不是直接退出,还有控制台的代码页问题,还有比如让蔡XK在...

    想必很多同学从开始学习C++的HelloWorld开始就已经接触到了控制台编程,有时候会遇到一些在控制台上的高级操作,比如有的程序按下Ctrl+C时会提示是否退出而不是直接退出,还有控制台的代码页问题,还有比如让蔡XK在控制台上跳舞等等问题,这些问题百度不一定能找到优秀的解决方案,或者说很难找到自己想要的东西,这时候其实求助于官方文档能够更快地找到答案,但是官方文档好像并不是特别地好找,下面我就把微软的控制台编程官方文档地址分享给大家让大家少走弯路。

    https://docs.microsoft.com/en-us/windows/console/

    附上一张图让大家感受感受微软的魅力
    Windows控制台编程文档

    展开全文
  • Windows控制台清屏

    2020-02-22 15:58:57
    Windows控制台编程中,我们有时需要清空屏幕,以便显示的需要 清屏有两种方法,最简单的一种 system("cls"); 较为复杂的是调用Windows API 在之前,首先要弄清清屏的概念,清屏相当于填充空格字符,然后将光标设为{0,0}...

    在Windows控制台编程中,我们有时需要清空屏幕,以便显示的需要
    清屏有两种方法,最简单的一种

    system("cls");
    

    较为复杂的是调用Windows API
    在之前,首先要弄清清屏的概念,清屏相当于填充空格字符,然后将光标设为{0,0}处。
    代码如下

    #include <Windows.h>
    BOOL ClearConsole(){
    	CONSOLE_SCREEN_BUFFER_INFO cinfo;//用于储存控制台缓冲区信息,在这里主要获取控制台缓冲区大小
    	DWORD recnum;
    	GetConsoleScreenBufferInfo(hOut, &cinfo);
    	//cinfo.dwSize储存的是缓冲区大小
    	//cinfo.dwSize.X * cinfo.dwSize.Y 即需填充的字符数
    	FillConsoleOutputCharacterW(hOut, L' ', cinfo.dwSize.X * cinfo.dwSize.Y, (COORD) { 0, 0 }, & recnum);//从{0,0}处开始填充' '字符,成功填充个数为recnum
    	FillConsoleOutputAttribute(hOut,0,cinfo.dwSize.X * cinfo.dwSize.Y, (COORD){0,0},&recnum);//设置输出颜色,如果不是单一颜色,可能会有清除字符而背景色没有清除的现象
    	SetConsoleCursorPosition(hOut, (COORD) { 0, 0 });//将光标设为{0,0}
    	if (recnum != cinfo.dwSize.X * cinfo.dwSize.Y) return FALSE;
    	return TRUE;
    }
    

    这种方法较快。

    展开全文
  • 控制台编程笔记

    2014-10-23 10:32:34
    1,控制台编程简介 windowS 系统有很多子系统,其中,与yong'f

    1,控制台编程简介

    windowS 系统有很多子系统,其中,与用房密切的有两大,windows和console子系统;

    console 由系统自己创建,就是我们说的小黑框。所谓的控制台编程就是这。虽然api已经集成到了库标准函数中了。

    2,控制台api与标准c函数

    很多c 都是字符见面,得益与windows控制台的一系列支持。

    3,控制台的基本概念;

    console句柄:console 句柄类似文件句柄,只当前控制台的操作对象,所有字符界面的api通过console句柄来完成,

    Stand In 标准输入句柄  Stand Out 标准输出句柄;

    4,控制台边1——获取输入输出句柄

    HANDLE WINAPI GetStdHandle(  // 返回HANDLE

    _In_ DWORD bStdHandle              //_In_ 类似于注释,或者空宏 有没有都可以。标志是输入用的。没特殊含义。 bStdHandle 是一个形参,微软就这么定的没为什么。

    );

    我们可以使用此API通过如下方式获取句柄://返回什么类型,就用什么类型去接它。

    HANDLE hStdIn,hStdOut;

    hStdIn = GetStdHandle(STD_INPUT_HANDLE);         //STD_INPUT_HANDLE  方便你记忆,这个常量定义成了宏

    hStdOut =GetStdHandle(STD_OUTPUT_HANDLE);  

    控制台输出内容  // 对着函数可以按F12 显示以下内容。

    WriteConsole();

    BOOL WINAPI  WriteConesole(

    _In_ HANDLE hConsoleOutput,

    _In_ const VOID *lpBuffer,

    _In_ DWORD nNum...ToWrite,

    _Out_ LPDWORD  lpNum..Written,

    _Reserved_ LPVOID lpReserved

    );


    ReadConsole();// 输入

    SetConsoleTitle() //设置控制台标题

    SrcWindow ();

    SetConsoleScreenufferSize();


    // winapi.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <windows.h>
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	HANDLE hStdIn, hStdOut;
    
    	hStdIn = GetStdHandle(STD_INPUT_HANDLE);
    	hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    	wchar_t szStr[20] = { 0 };
    	DWORD dwRet;
    	WriteConsole(hStdOut, L"Hello World!", 12, &dwRet, NULL);
    	if (!SetConsoleTitle(L"15PB!")){
    	
    	}
    	SMALL_RECT srctWindow = { 0, 0, 40 - 1, 10 - 1 };
    	if (!SetConsoleWindowInfo(hStdOut,true,&srctWindow))
    	{
    		return 0;
    	}
    	COORD BufferSize = { 40, 10 };
    	if (!SetConsoleScreenBufferSize(hStdOut,BufferSize))
    	{
    
    	}
    	wchar_t szStrA[15] = L"Hello World!";
    	COORD pos = { 20, 5 };
    	if (!WriteConsoleOutputCharacter(hStdOut,szStrA,12,pos,&dwRet))
    	{
    		//指定位置输出字符串失败
    	}
    	WORD wClr[10];
    	wmemset((wchar_t*)wClr, FOREGROUND_GREEN, 10);
    	wClr[8] = FOREGROUND_RED;
    	wClr[9] = FOREGROUND_GREEN | FOREGROUND_RED;
    	if (!WriteConsoleOutputAttribute(hStdOut,wClr,10,pos,&dwRet))
    	{
    		//在指定位置设置字符串颜色失败
    	}
    	system("pause");
    	return 0;
    }


    vs2013运行;






    展开全文
  • c#初学者或C语言蜕变成c#编程的朋友,可以充实自己的c#编程知识。 支持c#,把c#做的更好!
  • 控制台程序处理Windows消息 #include <stdio.h> #include <windows.h> BOOL WINAPI ConsoleHandler(DWORD CEvent) { char mesg[128]; switch(CEvent) { case CTRL_C_EVENT: MessageBox...
  • windows控制台常用指令

    2012-12-30 14:40:46
    windows控制台常用代码,有这个就够了,会DOS编程才是牛人
  • Visual Studio 控制台编程getXbyY() 实验目的 掌握Visual Studio控制台应用编程的基本方法 掌握Windows Sockets DLL的初始化和释放方法 掌握Windows Sockets API调用的一般步骤 使用Windows Sockets的API函数获得...
  • windows控制台字体颜色的编程

    千次阅读 2009-06-03 11:19:00
    如题:都需要哪些知识点呢??1.可以调用函数system("cmd");头文件为stdlib.h.函数中的cmd是dos命令,有以下常用的可以... //设置控制台前景背景颜色;system ("pause"); //暂停程序并显示消息;其他可以在cmd窗口中输入he
  • C++ 控制台编程

    2016-04-10 10:37:00
    windows.h> 2 #program <mmsystem.h> 3 #pragma comment(lib,"winmm.lib") 4 mcisendstring(”open music.wav”,NULL,0,0); 5 mcisendstring(”play music.wav”,NULL,0,0); 这个...
  • JDK6中提供了java.io.Console类专用来访问基于字符的控制台设备. 你的程序如果要与Windows下的cmd或者Linux下的Terminal交互,就可以用Console类代劳. 但我们不总是能得到可用的Console, 一个JVM是否有可用的Console...
  • C++windows控制台贪吃蛇

    2019-02-18 23:45:16
    C++windows控制台贪吃蛇 说实话,编程语言的学习挺枯燥的,对于已经过了尝鲜期,开始接触比较深层次的初学者来说更是如此。而作为耐得住寂寞的理工/IT男,“苦中作乐”已为常态。写点小游戏娱乐娱乐,满足创造欲的...
  • C++控制台编程“坦克大战”

    千次阅读 多人点赞 2020-04-09 21:51:34
    2、这是控制台的界面,展示一下各个功能的界面 开始界面 单人模式界面 双人模式界面 自定义地图 3、以下是代码展示 这是菜单类 #include "Menu.h" #include <windows.h> #include "Game.h" //显示欢迎界面...
  • 在我们进行mfc编程和win32窗口编程时,会发现没有控制台窗口其实有时候很无助的,想展示一个数据,要么msg要么debug,但是往往最熟悉的还是那个黑色的窗口 方法: AllocConsole() ; 此函数会为当前进程分配一个...
  • windows控制台编程相关的API应用以及示例代码,包括控制台输入输出以及鼠标键盘事件等内容。
  • windows平台下,可以使用native wifi api来控制无线网卡,包括获取无线网卡参数,获取周围无线接入点参数等功能,在windows xp sp2版本的系统上,使用需要下载一个KB918997补丁包才能支持。
  • [问题描述]:记得去年机试华为的时候,要写一些C++ 的小程序。 其实都是一些非常基础的操作,因为做多了大型的工程项目,拘泥于业务逻辑,平时又可以...windows.h> sleep(3000); 法2: 控制台输出等待 ...
  • #pragma comment(linker,"/subsystem:\"Windows\" /ENTRY:\"mainCRTStartup\"") 将如上代码添加到源文件即可。 原理 预处理指令 #pragma comment…… 告诉链接器将程序链接为 标准窗口程序 ,入口点为 ...
  • 前言:不会QT和MFC,所以就在控制台实现socket之Select模型聊天室。 一、概述 程序使用到MySQL(很简单的运用)技术和Select编程模型,以MySQL数据库中关系辅以socket编程实现对目标好友或群组发送接收消息。可以...
  • 学习目标 :) 1.编写一个主程序文件 main1.c 和一个子程序文件 sub1.c,其中,子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此...(2) 在windows系统下用编译工具编译主程序main1.c 并运行。 2.在
  • #include <Windows.h> #include int main() { //定义输出信息 char *str = "Hello World!"; int i; int len = strlen(str); //阴影属性 WORD shadow = BACKGROUND_INTENSITY; //文本属性 ...
  • 本节通过一个Windows控制台应用程序实现基于流式套接字的回射功能。所谓回射是指服务器接收客户发来的字符,并将接收到的内容再次发送回客户端,以此作为检测网络和主机运行状态的一种途径。客户发送的字符可以是用
  • 本程序代码基于 《windows网络编程》 5.4 编程举例 修改所得。 程序功能: 向指定服务器发起连接请求,与服务器之间实现收发数据,然后关闭连接。客户端实现用户输入信息方式与服务器对话。 1)使用基本的服务器编程...
  • 参考资料①-C语言控制台窗口界面编程 1、解决C语言设置窗口缓冲区问题 2、学习Windows控制台窗口界面知识
  • 这里只说明在window下使用控制台执行一些自己编写的程序,或者是进行交互式编程的时候会经常遇到乱码问题,这是因为Window cmd的默认编码是GBK。与程序采用的 UTF-8 不一致造成的中文及特殊字符乱码。 第一种方式:...
  • 原文链接:http://blog.csdn.net/VisualEleven/article/details/5517541 在GUI程序中使用printf函数:   [cpp] view plaincopy #include  #include  ...
  • 如果在控制台程序中编译成功,显示后出现闪退,自己看不到结果的情况,可能是由于编译器配置问题。 解决方法: 项目->属性->配置属性->链接器->系统->子系统->控制台 增加“/SUBSYSTEM:CONSOLE”链接选项。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,349
精华内容 539
热门标签
关键字:

windows控制台编程