VC++网络编程之实例篇
VC++WinInet类实现Internet编程
一、MFC WinInet类1、简介WinInet的全称是Microsoft Win32 Internet Functions,是微软公司提供给用户进行Internet编程的API接口函数。
WinInet函数包含在系统动态链接库WinInet.dll中,微软公司通过对WinInet API接口函数进行封装形成了WinInet类。
WinInet类使得程序可以在较高的上编写Internet客户端应用程序,而不用关心网络协议和Winsock套接字的具体细节。
WinInet类不是一个类,而是一批类的集合,MFC对这些类进行了封装。
二、超文本传输协议1、概述超文本传输协议(Hypertext Transfer Protocol,HTTP)是万维网(World Wide Web,WWW,简称Web)的基础。
HTTP协议是基于TCP/IP协议之上的应用层协议,它是WWW应用的主流协议。
基于HTTP协议开发的应用程序主要是客户端/服务器端(b/s)模式,以一种请求/应答的方式进行通信。
在客户端与服务器端建立连接后,客户端可以向服务器端发送请求服务,HTTP请求的格式为URI+HTTP版本号+有效数据,其中URI(Uniform Resource Identifier)为统一资源标识符,请求的方法常用的有GET、HEAD、POST这三种,这三种请求方法的功能如下表所示:服务器端在收到客户端的请求后,给予客户端相应的应答信息,应答格式为HTTP版本号+应答码+有效数据。
HTTP协议的通信端口默认是80,基于HTTP协议的客户端/服务器端通信流程主要包括建立连接、发送请求信息、发送应答信息和关闭连接。
说明:通过应用Winsock可以完成上面基于HTTP协议的通信,实现过程会复杂一点。
2、用MFC WinInet类建立访问Internet服务器端的客户端应用程序用MFC WinInet类建立访问Internet服务器端的客户端应用程序的步骤如下:(1)、建立会话。
vc++简单的木马编写之服务端篇
vc++简单的木马编写之服务端篇珍藏版特洛依木马这个名词大家应该不陌生,自从98年“死牛崇拜”黑客小组公布Back Orifice以来,木马犹如平地上的惊雷,使在Dos——Windows时代中长大的中国网民从五彩缤纷的网络之梦中惊醒,终于认识到的网络也有它邪恶的一面,一时间人心惶惶。
我那时在《电脑报》上看到一篇文章,大意是一个菜鸟被人用BO控制了,吓得整天吃不下饭、睡不着觉、上不了网,到处求救!要知道,木马(Trojan)的历史是很悠久的:早在AT&T Unix和BSD Unix十分盛行的年代,木马是由一些玩程式(主要是C)水平很高的年轻人(主要是老美)用C或Shell语言编写的,基本是用来窃取登陆主机的口令,以取得更高的权限。
那时木马的主要方法是诱骗——先修改你的.profile文件,植入木马;当你登陆时将你敲入的口令字符存入一个文件,用Email的形式发到攻击者的邮箱里。
国内的年轻人大都是在盗版Dos的熏陶下长大的,对网络可以说很陌生。
直到Win9x横空出世,尤其是WinNt的普及,大大推动了网络事业的发展的时候,BO这个用三年后的眼光看起来有点简单甚至可以说是简陋的木马(甚至在Win9x的“关闭程序”对话框可以看到进程)给了当时中国人极大的震撼,它在中国的网络安全方面可以说是一个划时代的软件。
自己编写木马,听起来很Cool是不是?!木马一定是由两部分组成——服务器程序(Server)和客户端程序(Client),服务器负责打开攻击的道路,就像一个内奸特务;客户端负责攻击目标,两者需要一定的网络协议来进行通讯(一般是TCP/IP协议)。
为了让大家更好的了解木马攻击技术,破除木马的神秘感,我就来粗略讲一讲编写木马的技术并顺便编写一个例子木马,使大家能更好地防范和查杀各种已知和未知的木马。
首先是编程工具的选择。
目前流行的开发工具有C++Builder、VC、VB和Delphi,这里我们选用C++Builder(以下简称BCB);VC虽然好,但GUI设计太复杂,为了更好地突出我的例子,集中注意力在木马的基本原理上,我们选用可视化的BCB;Delphi也不错,但缺陷是不能继承已有的资源(如“死牛崇拜”黑客小组公布的BO2000源代码,是VC编写的,网上俯拾皆是);VB嘛,谈都不谈——难道你还给受害者传一个1兆多的动态链接库——Msvbvm60.dll吗?启动C++Builder 5.0企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。
vc编程设计例题100例
vc编程设计例题100例VC编程是指使用Visual C++进行程序设计的一种方法。
在学习VC 编程的过程中,通过实际的例题练习,可以更好地掌握编程技巧和应用。
下面将介绍一些VC编程设计例题,供大家参考。
1. 编写一个程序,实现两个整数的加法运算,并输出结果。
2. 编写一个程序,实现两个整数的乘法运算,并输出结果。
3. 编写一个程序,实现两个整数的除法运算,并输出结果。
4. 编写一个程序,实现两个整数的取余运算,并输出结果。
5. 编写一个程序,实现两个整数的比较,并输出较大的数。
6. 编写一个程序,实现两个整数的比较,并输出较小的数。
7. 编写一个程序,实现两个整数的平均值计算,并输出结果。
8. 编写一个程序,实现两个整数的最大公约数计算,并输出结果。
9. 编写一个程序,实现两个整数的最小公倍数计算,并输出结果。
10. 编写一个程序,实现一个整数的阶乘计算,并输出结果。
11. 编写一个程序,实现一个整数的平方计算,并输出结果。
12. 编写一个程序,实现一个整数的立方计算,并输出结果。
13. 编写一个程序,实现一个整数的平方根计算,并输出结果。
14. 编写一个程序,实现一个整数的立方根计算,并输出结果。
16. 编写一个程序,实现一个整数的正弦计算,并输出结果。
17. 编写一个程序,实现一个整数的余弦计算,并输出结果。
18. 编写一个程序,实现一个整数的正切计算,并输出结果。
19. 编写一个程序,实现一个整数的反正弦计算,并输出结果。
20. 编写一个程序,实现一个整数的反余弦计算,并输出结果。
21. 编写一个程序,实现一个整数的反正切计算,并输出结果。
22. 编写一个程序,实现一个整数的自然对数计算,并输出结果。
23. 编写一个程序,实现一个整数的指数计算,并输出结果。
24. 编写一个程序,实现一个整数的对数计算,并输出结果。
25. 编写一个程序,实现一个整数的四舍五入计算,并输出结果。
26. 编写一个程序,实现一个整数的向上取整计算,并输出结果。
vcsocket通信实例总结五篇
vcsocket通信实例总结五篇第一篇:vc socket通信实例总结VC++ socket通信实例总结1.两天计算机通信需要协议,通信的两台计算机IP必须唯一2.同一个计算机可以进行多个应用程序与其他计算机通信,IP地址唯一,而端口号是区别同一计算机(同一IP)的唯一标示。
3.实际上就类似于一个办公室的总机号码(IP)和分机号码(端口号)4.协议:为了进行网络中的数据交换(通信)而建立的规则、标准或约定5.协议=语义+语法+规则6.不同层具有各自不同的协议7.上层使用下层提供的服务,实际通信在最底层完成8.对等层实体之间虚拟通信| 9.TCP:面向连接的可靠的传输协议10.UDP:面向无连接的不可靠的传输协议11.端口是一种抽象的软件结构。
应用程序通过系统调用与某端口建立连接后,传输层传给端口的数据都被响应的进行所接收,相应进程发给传输层的数据都通过该端口输出。
12.端口用一个整数型标示符来表示。
端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP 是完全独立的两个软件模块,因此各自的端口号也相互独立。
13.端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务。
例如:http使用的是80端口。
14.socket(套接字):windows sockets只支持一个通信区域:网际域(AF_INET),这个域被使用网际协议簇通信的进程使用。
15.C/S模式:客户机向服务器提出请求,服务器接收到请求后,提供相应的服务。
16.套接字的类型a)流式套接字:(SOCK_STREAM):面向连接可靠的数据传输服务,按顺序接收b)数据包式套接字:(SOCK_DGRAM):无连接服务。
接收顺序混乱。
c)原始套接字(SOCK_RAM)17.基于TCP(面向连接)的socket 编程 a)服务器端程序:i.创建套接字socketii.将套接字绑定到一个本地地址和端口上bindiii.将套接字设为监听模式,准备接收客户请求listeniv.等待客户请求到了;当请求到来后,接收连接请求,返回一个新的对应于此次连接的套接字acceptv.和客户端进行通信rend/recvvi.户请求vii.b)客户端程序:i.socketii.接请求connectiii.通信rend/recviv.18.基于UDP的socket编程 a)服务器端(接收端)程序:i.socket用返回的套接字返回,等待另一客关闭套接字创建套接字向服务端发出连和服务器端进行关闭套接字创建套接字ii.将套接字绑定到一个本地地址和端口上bindiii.等待接收数据recv/fromiv.关闭套接字 b)客户端(发送端)程序:i.创建套接字socketii.向服务器发送数据sendtoiii.关闭套接字 19.int WSAStartup(WORD wVersionRequested, //打算使用的最高winsock版本号LPWSADATA lpWSAData //是个结构体,接收socket的详细信息);20.alt+F8:格式化代码 21.面向TCP的连接,服务器端a)套接字SOCKET socket(int af,//指定地址簇int type,//socket类型int protocol //协议);b)绑定int bind(SOCKET s,//要绑定的套接字const struct sockaddr FAR* name, //指定了该套接字的本地地址信息int namelen//该地址结构的长度);struct sockaddr {u_shortsa_family;charsa_data[14];};c)监听int listen(SOCKET s,int backlog);d)接受连接SOCKET accept(SOCKET s,struct sockaddr FAR* addr,int FAR* addrlen);e)发送int send(SOCKET s,//建立连接的socket const char FAR * buf, //发送的数据int len,//发送数据的长度int flags);f)接收int recv(SOCKET s,char FAR* buf,int len,int flags);g) 需要的文件#include 需要连接一个动态链接库:ws2_32.lib 22.服务器端: a)Socket b)连接:connect int connect(SOCKET s,const struct sockaddr FAR* name,int namelen);c)接收:recv d)发送:send e)关闭:closesocketTcp服务端程序:=========#include#includevoidmain(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, &wsaData);if(err!= 0){return;}if(LOBYTE(wsaData.wVersion)!= 1 ||HIBYTE(wsaData.wVersion)!= 1){WSACleanup();return;}SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));listen(sockSrv,5);SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);while(1){SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);char sendBuf[100];sprintf(sendBuf,“Welcome %s to 刘洼村”,inet_ntoa(addrClient.sin_addr));send(sockConn,sendBuf,strlen(sendBuf)+1,0);char recvBuf[100];recv(sockConn,recvBuf,100,0);printf(“%sn”,recvBuf);closesocket(sockConn);}} 24.Tcp客户端程序:[cpp] view plaincopy#include#includevoid main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, &wsaData);if(err!= 0){return;}if(LOBYTE(wsaData.wVersion)!= 1 ||HIBYTE(wsaData.wVersion)!= 1){WSACleanup();return;}SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(“127.0.0.1”);//服务器端的地址addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKAD DR));char recvBuf[100];recv(sockClient,recvBuf,100,0);printf(“%sn”,recvBuf);send(sockClient,“This is 刘洼村”,strlen(“This is 刘洼村”)+1,0);closesocket(sockClient);WSACleanup();}25.运行之后,开启了6个客户端,一个服务器端。
c++网络编程实例
第1章Visual C++网络编程概述Visual C++(后面简写为VC)网络编程是指用户使用MFC类库(微软基础类库)在VC编译器中编写程序,以实现网络应用。
用户通过VC编程实现的网络软件可以在网络中不同的计算机之间互传文件、图像等信息。
本章将向用户介绍基于Windows操作系统的网络编程基础知识,其开发环境是VC。
在VC编译器中,使用Windows Socket进行网络程序开发是网络编程中非常重要的一部分。
1.1 网络基础知识如果用户要进行VC网络编程,则必须首先了解计算机网络通信的基本框架和工作原理。
在两台或多台计算机之间进行网络通信时,其通信的双方还必须遵循相同的通信原则和数据格式。
本节将向用户介绍OSI七层网络模型、TCP/IP协议以及C/S编程模型。
1.1.1 OSI七层网络模型OSI网络模型是一个开放式系统互联的参考模型。
通过这个参考模型,用户可以非常直观地了解网络通信的基本过程和原理。
OSI参考模型如图1.1所示。
图1.1 OSI七层网络模型用户从OSI网络模型可以很直观地看到,网络数据从发送方到达接收方的过程中,数据的流向以及经过的通信层和相应的通信协议。
事实上在网络通信的发送端,其通信数据每到一个通信层,都会被该层协议在数据中添加一个包头数据。
而在接收方恰好相反,数据通过每一层时都会被该层协议剥去相应的包头数据。
用户也可以这样理解,即网络模型中的各层都是对等通信。
在OSI七层网络模型中,各个网络层都具有各自的功能,如表1.1所示。
表1.1 各网络层的功能协议层名功能概述物理硬件层表示计算机网络中的物理设备。
常见的有计算机网卡等数据链路层将传输数据进行压缩与加压缩网络层将传输数据进行网络传输数据传输层进行信息的网络传输会话层建立物理网络的连接表示层将传输数据以某种格式进行表示应用层应用程序接口注意:在表1.1中列出了OSI七层网络模型中各层的基本功能概述。
用户根据这些基本的功能概述会对该网络模型有一个比较全面的认识。
VC++程序实例
VC++6.0 实例教案----------------沈阳工业大学理学院VC 程序设计实例教案:一个最简单的程序:#include<iostream.h>void main(){cout<<”Hello,World!\n”;}说明:main:表示主函数(每个C++程序必须并且只有一个主函数){}:函数体所在的范围:cout:输出到屏幕《:插入符(插入到cout 中,将后面的内容输出到屏幕\n:换行符(输出“Hello World!后换行)iostream.h: 头文件#include:预处理指令:C++程序的组成:1.预处理命令(#开头,包含三类:宏定义命令、文件包含命令、条件编译命令)2.函数(可以使用库函数和自定义函数)3.语句(组成程序的基本单元)4.变量和对象(对象C++指的是类的实例)5.输入和输出6.注释:用//开头输出的格式://cout 的格式输出(P38)#include<iostream.h>void main(){int nNum=1234;double fNum=12.3456789;cout<<"1234567890"<<endl;cout.width(10);cout<<nNum<<'\n'<<endl;cout.width(10);cout<<fNum<<endl;cout<<cout.precision(4)<<endl;cout<<fNum<<endl;1VC++6.0 实例教案----------------沈阳工业大学理学院}输入流(cin)(获得键盘的输入值)(P39)#include<iostream.h>void main(){int nNum;co ut<<”Please Input a Hex integer:”;cin>>hex>>nNum;cout<<”Oct\t”<<oct<<nNum<<endl;cout<<”Dec\t”<<dec<<nNum<<endl;cout<<”Hex\t”<<hex<<nNum<<endl;}选择语句:条件语句:if 语句:形式为:if(<表达式>)<语句1>[else<语句2>]示例://两个整数大小比较(P39)#include<iostream.h>void main(){int nNum1,nNum2;cout<<"Please input two integer numbers:";cin>>nNum1;cin>>nNum2;if(nNum1!=nNum2)if(nNum1>nNum2)cout<<nNum1<<">"<<nNum2<<endl;elsecout<<nNum2<<"<"<<nNum1<<endl;elsecout<<nNum1<<"="<<nNum2<<endl;}开关语句:switch格式:switch(<表达式>){2VC++6.0 实例教案----------------沈阳工业大学理学院case<常量表达式1>:[语句1]case<常量表达式2>:[语句2]……case<常量表达式n>:[语句n][default :[语句n+1]}示例://根据成绩输出相应的分数段(P41)#include<iostream.h>void main(){char chGrade;cout<<"Please input a char:";cin>>chGrade;switch(chGrade){case'A':case'a':cout<<"90~100\n";break;case'B':case'b':cout<<"80~90\n";break;case'C':case'c':cout<<"70~80\n";break;case'D':case'd':cout<<"60~70\n";break;case'E':case'e':cout<<"<60\n";break;default:cout<<"Error"<<endl;}}循环语句:while 循环语句格式:while(<表达式>)<语句>//求整数1~50 的和,用while 语句(P42)#include<iostream.h>3VC++6.0 实例教案----------------沈阳工业大学理学院void main(){int nNum=1,nTotal=0;while(nNum<=50){nTotal+=nNum;nNum++;}cout<<"The sum from 1 to 50 is "<<nTotal<<endl;}do whilw 循环语句:格式:do<语句>while(<表达式>)//求整数1~50 的和,用d0-while 语句(P43)#include<iostream.h>void main(){int nNum=1,nTotal=0;do{nTotal+=nNum;nNum++;}while(nNum<=50);cout<<"The sum from 1 to 50 is "<<nTotal<<endl;}for 循环语句:格式:for([表达式1];[表达式2];[表达式])<语句>//用for 语句求1~50 之和(P43)#include<iostream.h>void main(){int nTotal=0;for(int nNum=1;nNum<=50;nNum++){nTotal+=nNum;}cout<<"The sum from 1 to 50 is: "<<nTotal<<endl;4VC++6.0 实例教案----------------沈阳工业大学理学院}break 和continue 语句:(跳出循环和重新开始循环)//用中断语句求0~100 之间的不能被7 整除的数(P45) #include<iostream.h>void main(){for(int nNum=1;nNum<=100;nNum++){if(nNum%7==0)continue;cout<<nNum<<" ";}}数组:格式:<类型><数组名>[<常量表达式1>][<常量表达式2>]…示例:把五个整数按从小到大顺序排列(P47)#include<iostream.h>void main(){int a[5]={-50,7,20,40,13};for(int i=0;i<5;i++){for(int j=i+1;j<5;j++){if(a[i]>a[j]){int temp=a[i];a[i]=a[j];a[j]=temp;}}cout<<a[i]<<" ";}}指针:指针变量是存放内存地址的变量。
VC编程实例
第一页VC++之网络通信技术之获取网上邻居VC++之网络通信技术之获取局域网其它计算机的IP地址VC++之网络通信技术之获取局域网其它计算机名VC++之网络通信技术之获取计算机提供的网络服务VC++之网络通信技术之获取计算机安装的网络协议VC++之数据库技术之更新所有记录VC++之数据库技术之更新特定条件记录VC++之数据库技术之更新指定记录VC++之数据库技术之删除所有记录VC++之数据库技术之删除特定条件记录VC++之数据库技术之删除指定记录VC++之数据库技术之查询编辑框数据VC++之数据库技术之查询日期控件数据VC++之网络通信技术之获取本地MAC地址VC++之网络通信技术之获取本地IP地址第二页VC++之网络通信技术之获取本地PC机名VC++之数据库技术之指定范围匹配查询VC++之数据库技术之基本查询2VC++之数据库技术之遍历记录集VC++之数据库技术之获取记录数据VC++之数据库技术之用ADO连接Oracle数据库VC++之数据库技术之用ADO连接SQL Server数据库VC++之数据库技术之用ADO连接Access数据库VC++之系统硬件信息之判断磁盘驱动器类型VC++之系统硬件信息之获取系统所有磁盘驱动器VC++之系统硬件信息之获取磁盘文件系统名称VC++之系统软件信息之获取磁盘剩余容量大小VC++之系统软件信息之获取磁盘容量大小VC++之系统硬件信息之设置磁盘卷标名称VC++之系统硬件信息之取磁盘卷标名称第三页VC++之系统硬件信息之获取磁盘序列号VC++之系统硬件信息之获取系统BIOS更新日期VC++之系统硬件信息之获取系统BIOS版本号VC++之系统硬件信息之获取显卡BIOS更新日期VC++之系统硬件信息之获取显卡BIOS版本号VC++之系统硬件信息之获取CPU个数VC++之系统硬件信息之获取CPU主频VC++之系统硬件信息之获取CPU制造商名称VC++之系统硬件信息之获取CPU标识VC++之系统硬件信息之获取CPU名称VC++之系统软件信息之获取Windows文件夹位置VC++之系统软件信息之获取System文件夹位置VC++之系统软件信息之获取我的文档文件夹位置VC++之系统软件信息之获取网上邻居文件夹位置VC++之系统软件信息之获取字体文件夹位置第四页VC++之系统软件信息之获取桌面文件夹位置VC++之系统软件信息之获取临时文件夹位置VC++之系统软件信息之获取Windows的版本名称VC++之系统软件信息之获取Windows的内建号VC++之系统软件信息之获取Windows的版本号VC++之系统软件信息之获取IE版本号VC++之系统软件信息之获取操作系统产品名称VC++之系统软件信息之获取操作系统安装系列号VC++之系统软件信息之获取计算机名VC++之系统软件信息之获取当前用户名VC++之系统软件信息之获取系统注册单位名VC++之系统软件信息之获取系统注册单位名VC++之系统控制之设置域名服务器超时VC++之系统控制之隐藏上次登陆用户记录VC++之系统控制之设置IE缓冲区路径第五页VC++之系统控制之删除网页链接中的下划线VC++之系统控制之显示工具栏“字体”按钮VC++之系统控制之改变收藏夹默认路径VC++之系统控制之清空地址栏历史记录VC++之系统控制之让打开的IE窗口最大化VC++之系统控制之IE中禁止显示状态栏VC++之系统控制之IE中禁止显示工具栏VC++之系统控制之修改IE默认主页VC++之系统控制之修改IE标题栏VC++之系统控制之设置桌面墙纸VC++之系统控制之获取操作系统版本号VC++之系统控制之获取当前显示模式VC++之系统控制之设置显示系统当前时间VC++之系统控制之设置启动自动运行程序VC++之系统控制之注销当前用户第六页VC++之系统控制之关闭计算机VC++之系统控制之禁用注册表VC++之系统控制之隐藏任务栏VC++之系统控制之隐藏桌面所有图标VC++之系统控制之隐藏我的文档VC++之系统控制之隐藏回收站VC++之系统控制之隐藏显示驱动器VC++之系统控制之隐藏我的电脑VC++之系统控制之隐藏显示文件注册表之删除子键注册表之设置注册表键值注册表之恢复注册表注册表之备份注册表注册表之注册表读写PIC之中断例一第七页VC++之多媒体编程之多媒体播放器一VC++之多媒体编程之用PC系统播放声音VC++之多媒体编程之左右声道控制VC++之多媒体编程之录音VC++之多媒体编程之CD播放器VC++之文件高级操作之文件读取VC++之文件高级操作之修改文件名VC++之文件高级操作之设置文件属性VC++之文件高级操作之获取文件属性VC++之文件高级操作之复制文件目录VC++之文件高级操作之目录重命名VC++之文件高级操作之移动文件VC++之文件高级操作之删除文件目录VC++之文件高级操作之创建删除文件夹VC++之文件高级操作之检索文件存在?第八页VC++之文件高级操作之文件搜索VC++之文件高级操作之清空回收站VC++之文件高级操作之将文件放入回收站VC++之文件基本操作之基于文档的文件操作VC++之文件基本操作之文档参数设置VC++之文件基本操作之基于CArchive类的文件读写VC++之文件基本操作之高级注册表读写VC++之文件基本操作之读写注册表VC++之文件基本操作之读写INI文件VC++之文件基本操作之文件对话框VC++之文件基本操作之基于MFC的文件读写VC++之图像显示小结VC++之文件基本操作之基于文件流的文件读写VC++文件基本操作之文件高级读写VC++之图像操作之合成图像第九页VC++之图像操作之剪切图像VC++之文件基本操作之文件读写VC++之绘制3D图形小结VC++之绘制3D图形之可控图像旋转VC++之绘制3D图像之图像旋转VC++之绘制3D图形之图形变换VC++之3D图形绘制VC++之图像操作之显示JPG图像VC++之图像操作之缩放图片VC++之图像操作之显示透明图像VC++之复杂图形绘制之小结VC++之复杂图形绘制之旋转文本VC++之复杂图形绘制之绘制带阴影字体VC++之复杂图形绘制之颜色渐变图形VC++之复杂图形绘制之窗口显示完整位图第十页VC++之复杂图形绘制之窗口内显示位图VC++之复杂图形绘制之设置对话框颜色VC++之复杂图形绘制之使用字体对话框VC++之复杂图形绘制之设置实时显示VC++之绘制复杂图形之VC++之复杂图形绘制之绘制饼图VC++之绘制复杂图形之改变图形颜色VC++之绘制复杂图形之改变图形参数VC++之绘制复杂图形之绘制多种图形VC++之绘制复杂图形之绘制正弦曲线VC++之绘制复杂图形之创建复杂直线VC++之简单图形绘制之小结VC++之简单图形绘制之绘制红色扇形VC++之简单图形绘制之绘制连续线条VC++之简单图形绘制之创建透明画刷第十一页VC++之简单图形绘制之用位图填充矩形VC++之简单图形绘制之绘制红色矩形VC++之简单图形绘制之创建渐变直线VC++之简单图形绘制之绘制红色直线VC++之简单图形绘制之绘制直线至整个框架VC++之简单图形绘制之绘制直线超出客户区VC++之简单图形绘制之基于MFC的直线绘制VC++之简单图形绘制之基于API的直线绘制VC++之框架窗体之小结VC++之框架窗体之窗口处于最上层VC++之框架窗体之锁定窗口VC++之框架窗体之切分窗口添加视类VC++之框架窗体之窗口动态效果VC++之框架窗体之动态切分窗口VC++之框架窗体之静态切分窗口第十二页VC++之框架窗体之圆角矩形窗口VC++之文档与视图小结VC++之文档与视图之平滑显示字体VC++之文档与视图之设置字体格式VC++之文档与视图之输入文字VC++之文档与视图之使用路径层VC++之文档与视图之添加文字VC++之文档与视图之创建图形插入符VC++之文档与视图之创建插入符VC++之工具栏与状态栏小结VC++之工具栏与状态栏之工具栏内滚动字体VC++之工具栏与状态栏之显示进度条VC++之工具栏与状态栏之状态栏显示当前时间VC++之工具栏与状态栏之状态栏显示鼠标位置VC++之工具栏与状态栏之调整工具栏第十三页VC++之工具栏与状态栏之浮动工具栏VC++之工具栏与状态栏之显示工具条VC++之工具栏与状态栏之显示隐藏工具栏VC++之工具栏与状态栏之动态加载工具栏VC++之工具栏与状态栏之工具栏的使用VC++之窗口外观之添加程序启动画面VC++之窗口外观之自动变幻图标VC++之窗口外观之创建后修改外观VC++之窗口外观之创建时修改程序外观VC++之窗口外观之修改窗口图标、背景、光标VC++之菜单部分小结VC++之菜单之动态生成菜单_菜单项VC++之菜单之为动态生成菜单添加响应函数VC++之菜之动态插入菜单和菜单项VC++之菜单之动态添加一个菜单第十四页VC++之菜单之右键弹出菜单VC++之菜单之单项菜单生_失效VC++之菜单之隐藏菜单栏VC++之菜单之屏蔽菜单VC++之菜单之图形标记菜单VC++之菜之菜单中文字粗体显示VC++之菜单之菜单标记VC++之控件部分的几个注意点VC++之控件之按钮动态变化VC++之控件之创建向导对话框VC++之控件之员工基本信息VC++之控件之使用颜色对话框VC++之控件之使用字体对话框VC++之控件之使用文件对话框VC++之控件之使用非模态对话框第十五页VC++之控件之使用模态对话框VC++之控件之使用时间控件VC++之控件之使用树控件VC++之控件之使用列表视图控件二VC++之控件之使用列表视图控件一VC++之控件之使用图像列表控件VC++之控件之员工信息管理界面VC++之控件之使用Tab控件VC++之控件之操作滚动条VC++之控件之使用进展条VC++之控件之使用滑动条改变编辑框字体颜色VC++之控件之使用滑动条VC++之控件之添加盘符VC++之控件之多目标关联VC++之控件之权限设置第十六页VC++之控件之员工信息查询系统VC++之控件之IP地址设置VC++之控件之编辑框的应用VC++之控件之人员信息输入VC++之控件之计算器VC++之控件之同步输入输出VC++之控件之彩色编辑框VC++之控件之改变编辑框内字体颜色VC++之控件之对话框控件组合应用VC++之控件之静态控件应用一。
VisualC网络编程案例实战之邮件接收和发送客户端
收和发送客户端
2.使用ShellExecute()函 数
• 在MFC编程中,除了函数CreateProcess() 以外,还可以调用函数ShellExecute()实 现相同的功能。该函数原型如下:
VisualC网络编程案例实战之邮件接 收和发送客户端
8.1.1 调用Windows自带 程序
• 在Windows操作系统中,所有的程序都 是以进程为单位运行。本节中所讲述的 调用邮件发送程序就是通过调用相应的 Windows进程实现的。调用该Windows 进程所使用的命令是“mailto:+string”, 其中,string表示邮件发送的目的地址。 例如,用户需要将邮件发送到邮件地址 为lymlrl@的邮箱中,使用的命 令是“mailto:lymlrl@”。
• 在网络中传输邮件信息都是基于TCP/IP 协议的,所以用户在Windows操作系统 中编写邮件发送程序时可以使用 Windows套接字来完成。一般情况下, 客户端连接服务器的几个步骤如下。
• (1)客户端指定IP地址和端口连接服务 器。
• (2)服务器收到连接请求,并同意客户 端连接请求。
• (3)客户端和服务器互相发送数据。 • (4)关闭服务器和客户端的套接字。 VisualC网络编程案例实战之邮件接
• 注意:使用该参数时,需要加上扩展 名,因为系统不会自动为其添加“.exe” 后缀名。
• 参数lpCommandLine表示将要传递到新 进程的命令行字符串。使Vis用ualC网该络编程参案例数实战之时邮件接,
收和发送客户端
• typedef struct _STARTUPINFO {
VC++网络程序设计实例
网络程序设计实例
if (!hWnd) return FALSE;
ShowWindow(hWnd, nC); // 主消息循环 while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
网络程序设计实例
if (!hWnd) return FALSE; ShowWindow(hWnd, nC); //主消息循环 while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
//本地网址
#define Cs2IP "127.0.0.1"
//远程网址
//--------------------------------------------------------------
//消息处理
LRESULT CALLBACK WndProc(HWND hW, UINT
msg, WPARAM wP, LPARAM lP)
PostQuitMessage(0);
网络程序设计实例
break; case WM_CREATE: //初始化触发事件 //装载动态链接库Winsock DLL WSAStartup(0x0202, &ws); //创建UDP套接字 s1=socket(AF_INET, SOCK_DGRAM,0); //设置地址类型 Cs1A.sin_family=AF_INET; //本地端口 Cs1A.sin_port = htons(Cs1Port);
基于VC++6.0 Socket编程操作实例
VC++6.0网络编程Socket编程作为一个初学者,深感Socket编程入门的困难,但当把一些问题弄懂之后,回过头来看以前遇到的一些问题,才发现Socket编程其实并没有那么复杂。
接下来我就把我遇到的一些困难讲述下,并补上解决的办法。
首先我们要想实现一个简单的点对点网络通信,就应该有一个客户和一个服务器我们先来做客户端。
先按照如下图所示建立好客户对话框模块:首先创建一个基于MFC AppWizard[EXE] 工程,工程名为Socket__002 (这里是以我的工程名为准,你们也可以自己命名工程。
)点击确定只收选择基本对话框,如图:点击下一步,在Windows Sockets[W]处钩上之后就点击【完成】。
建立如图所示的客户端对话框:控件属性:说明:IDC_EDIT1 端口号编辑框,IDC_EDIT3 发送文本框,IDC_IPADDRESS1 IPd 地址框,IDC_LIST1 列表框。
现在模块已经建好了,接下来就是写代码了,不过写代码之前我们要先理清思路。
客户端与服务器是怎样来实现通信的呢,其实就是由数据的发送者客户端将要发送的信息写入一个套接字,在通过中间环节传输到接收端服务器的套接字中,就可以由接收端的应用程序将套接字从中取出。
因此,两个应用程序间的数据传输要通过套接字来完成,至于两个套接字间是怎么传输的我们就不要管了,我们只要把信息装入套接字中就可以了。
作为一个客户端,应该具备以下功能:1,、向指定地址的服务器发送连接请求;2、向已经连接成功的服务器发送信息;3、主动断开与服务器的连接;当我们已经知道客户端的功能时就应该想到,我们该怎样用代码实现这些功能呢;当然对于初学者来说编写这些代码还有点困难,我们可以先参考网络上的资料把原理弄懂,这才是我写这篇文章的本意。
VC6.0界面中的工作区点击ClassView 选项卡,右击【Socket_002 classes】-----【NewClass】添加新类“Client_Socket”基类为generic CWnd。
VC++下实现Socket编程方法
VC++下实现Socket编程方法利用Socket编程是一类典型的网络通信程序,特别是在实时性要求比较高的项目中,Winsock编程方法是非常实用的。
下面介绍在VC 6.0环境下开发Winsock 程序的方法。
这里并没有直接应用MFC 提供的CSocket类,这是因为考虑到对于类而言,其成员函数调用必然是完全阻塞方式的,因此只能用于人工线程中。
基于这种思想,可以在CObject类基础上派生一个套接字类,其使用方式为阻塞方式,虽然增加了使用的条件,但可以保证其正常工作,而不会出现不加控制地使用CSocket对象带来的冲突现象。
下面首先将具体介绍有关的套接字类的定义,新创建的套接字功能主要通过调用CSocket的相关操作实现。
1 套接字类CBlockingSocket首先需要定义此套接字类,在类中设置了一个属性变量:SOCKET m_hSocket; m_hSocket 表示套接字的句柄。
另外还构造了一组方法,其功能与CSocket类是对应的,下面以创建、监听、连接建立和消息的接收和发送为例,介绍其实现方法,。
●创建创建套接字即要求创建相应的连接,缺省类型为面向连接的流,具体实现为:void CBlockingSocket::Create(int nType){ASSERT(m_hSocket == NULL);if((m_hSocket = socket(AF_INET, nType, 0)) == INVALID_SOCKET) {throw new CBlockingSocketException("创建套接字"); } }●监听Listen函数完成监听连接的任务,在实现时要求最多有10个连接请求排队,这在一般的应用中是完全足够的。
void CBlockingSocket::Listen(){ASSERT(m_hSocket != NULL);if(listen(m_hSocket, 10) == SOCKET_ERROR) {throw new CBlockingSocketException("Listen"); }}●建立连接连接的实际建立可以由Connect实现,同样地,缺省的建立方式为面向连接的流。
VC++网络编程之实例篇
一个简单的论坛灌水工具我在/index.php?prog=topic::flat&tid=219030里面回复了这样一个贴:标题是:Re:啥时候下雪啊回复内容是:下啊下啊经过截取后,得到这样的数据包:POST /index.php?prog=topic::reply&tid=219030 HTTP/1.1..Accept: image/gif,image/x-xbitmap, image/jpeg, image/pjpeg, */*..Referer:/index.php?prog=topic::flat&tid=219030..Accept-Language: zh-cn..Content-Type: application/x-www-form-urlencoded..Accept-Encoding: gzip, er-Agent: Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1)..Host: ..Content-Length: 509..Connection: Keep-Alive..Cache-Control: no-cache..Cookie: CEFS=56a4967e3f0923cc0b9e361d2599290f....title=Re%3A%C9%B6%CA%B1%BA%F2%CF%C2%D1%A9%B0%A1&cetag=checked&autoParseURL=checked&smiles=checked&showsign=checked&domai ns=&q=Google+Site+Search&sitesearch=&client=pub-9549696168596987&forid=1&channel=5833732144&ie=GB2312&oe=GB2312&cof=GALT%3A %23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A 336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID %3A1%3B&hl=zh-CN&content=%CF%C2%B0%A1%CF%C2%B0%A1&parentid=0不要给这个数据包吓倒,实际上我们关心的只有几个地方,我都用红字标出了。
C语言程序设计100个简单的经典例子
经典C语言程序设计100例1.数字排列37.对10 个数进行排序70.计算一个字符串长度2.奖金分配问题38.求3*3 矩阵对角线元素之和71.编写输入/输出函数3.已知条件求解整数72.创建链表4.输入日期判断第几天39.数字插入数组重新排序40.将73.反向输出链表5.输入整数进行排序一个数组逆序输出74.连接两个链表6.用* 号显示字母C 的图案41.static 定义静态变量用法42. 75.算一道简单题目使用auto 定义变量用法43.使用7.显示特殊图案76.调用函数求1/2+1/4+...+1/n8.打印九九口诀static 的另一用法77.填空练习(指向指针的指针)9.输出国际象棋棋盘44.使用external 的用法78.找到年龄最大的人10.打印楼梯并按条件打印笑脸45.使用register 定义变量方法79.字符串排序11.经典兔子问题46.宏#define 命令练习(1) 80.海滩猴子分桃12.判断素数47.宏#define 命令练习(2) 81.已知公式条件求数字13.水仙花数问题48.宏#define 命令练习(3) 82.八进制转换为十进制14.正整数分解质因数49.#if #ifdef 和#ifndef 的综合应83.求0-7 所能组成的奇数个数15.学习成绩划分用84.由两个素数之和表示的偶数16.正整数求其最大公约数和最50.#include 的应用练习85.判断一个素数能被几个9 整小公倍数51.学习使用按位与& 除17.统计英文字母/空格/ 数字个52.学习使用按位或| 86.两个字符串连接程序数53.学习使用按位异或^ 87.结构体变量传递18.求s=a+aa+aaa+aa...a 的值54. 取一个整数从右端开始的88.读取数字的整数值并打印出19.求解" 完数" 4~7 位。
该值个数的*20.球体自由落下物理问题55.学习使用按位取反~ 89.数据加密21.猴子吃桃问题56.用circle 画圆形90.专升本一题22.乒乓球比赛抽签问题57.学用line 画直线91.时间函数举例123.打印菱形图案58.用rectangle 画方形92.时间函数举例224.分数数列求和59.画图综合例子 1 93.时间函数举例325.求1+2!+3!+...+20! 的和26. 60.画图综合例子 2 94.一个猜数游戏利用递归方法求5!61.打印杨辉三角形95.家庭财务管理小程序27.将输入字符以相反顺序打印62.学习putpixel 画点96.计算字符串中子串出现的次28.岁数问题63.画椭圆ellipse数29.求解正整数位数64.利用ellipse and rectangle 画97.输入字符并保存到磁盘98.字30.判断回文数图符串转换成大写字母并输出保31.星期几猜测游戏65.画个最优美的图案存32.改变文本颜色66.输入 3 个数字按大小顺序输99.文件操作应用133.学习gotoxy()与clrscr() 函数出100.文件操作应用234.练习函数调用67.输入数组交换元素重新输出35.设置文本颜色68.多个整数后移位置问题36.求100 之内的素数69.圆圈报数问题--------------------------------------------------------------------------------c语言经典100题【实用】【程序1】题目:有1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?26.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
(VC+++编程指南)-学习Enroll例程
(VC++ 编程指南)-学习Enroll例程10.7 学习Enroll例程Visual C++提供了一个名为Enroll的例子来作为学习MFC数据库编程的教程(Enroll分为四步,本节的任务就是指导读者完成前三步的Enroll例程,并对其进行较彻底的剖析(通过学习这三步例程,读者将掌握用AppWizard和ClassWizard创建MFC数据库应用程序的方法(在开始学习Enroll例程时,读者也许会感到用AppWizard创建数据库应用很容易,似乎不用学习前面几节的内容(诚然,AppWizard自动地为应用程序加入了许多与数据库有关的代码,大大简化了数据库应用的开发(但AppWizard不是万能的,它建立的数据库应用往往不能满足用户的需要(用户真正想知道的是如何不依赖AppWizard而编写自己的数据库应用程序,这也正是本章的宗旨所在(事实上,前面几节的分析以及后面进行的对Enroll例程的分析正是为这一宗旨服务的( 在学习Enroll以前,请读者先从Visual C++ 5.0的光盘上将Enroll(在samples \ mfc \ tutorial\ enroll目录下)在前三步的例程拷到硬盘上,以供参考(另外,Enroll要用到Access数据库STDRED32.MDB,该文件在VC5.0的Stdreg例程中(在samples \ mfc \ database \ stdreg目录下),请读者将该例子也拷贝到硬盘上(10.7.1 注册数据源ODBC应用程序不能直接使用数据库,用户必需为要使用的数据库注册数据源(注册数据源的工作由ODBC管理器完成,该管理器位于Windows 95控制面板的32位ODBC内(现在让我们为Access数据库STDREG32.MDB注册数据源(打开控制面板,双击“32位ODBC”图标,则会显示一个“ODBC数据源管理器”,如图10.5所示。
在管理器中选择“用户DSN”页,用户DSN只对用户可见而且只能用户当前机器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个简单的论坛灌水工具我在/index.php?prog=topic::flat&tid=219030里面回复了这样一个贴:标题是:Re:啥时候下雪啊回复内容是:下啊下啊经过截取后,得到这样的数据包:POST /index.php?prog=topic::reply&tid=219030 HTTP/1.1..Accept: image/gif,image/x-xbitmap, image/jpeg, image/pjpeg, */*..Referer:/index.php?prog=topic::flat&tid=219030..Accept-Language: zh-cn..Content-Type: application/x-www-form-urlencoded..Accept-Encoding: gzip, er-Agent: Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1)..Host: ..Content-Length: 509..Connection: Keep-Alive..Cache-Control: no-cache..Cookie: CEFS=56a4967e3f0923cc0b9e361d2599290f....title=Re%3A%C9%B6%CA%B1%BA%F2%CF%C2%D1%A9%B0%A1&cetag=checked&autoParseURL=checked&smiles=checked&showsign=checked&domai ns=&q=Google+Site+Search&sitesearch=&client=pub-9549696168596987&forid=1&channel=5833732144&ie=GB2312&oe=GB2312&cof=GALT%3A %23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A 336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID %3A1%3B&hl=zh-CN&content=%CF%C2%B0%A1%CF%C2%B0%A1&parentid=0不要给这个数据包吓倒,实际上我们关心的只有几个地方,我都用红字标出了。
tid=219030:表示你回帖的是那个主贴Cookie: CEFS=56a4967e3f0923cc0b9e361d2599290f....:COOKIE的CEFS(它应该是标识一个特定COOKIE的32字节字符串),用户登陆BBS后会返回一个CEFStitle=Re%3A%C9%B6%CA%B1%BA%F2%CF%C2%D1%A9%B0%:回复帖子的标题,这里的%3A%C9%B6%CA%B1%BA%F2%CF%C2%D1%A9%B0%代表的就是Re:啥时候下雪啊同理,content=%CF%C2%B0%A1%CF%C2%B0%A1&parentid=0也是代表发贴内容在这个数据包中,tid,title,content,我们都可以根据自己的需要随意改,只有cookie不可以,COOKIE的CEFS是用户登陆论坛后一个特定的标识,在同个用户的连续发贴过程中,它是可以保持不变的,关键在于我们如何获取这个CEFS,CEFS是用户在登陆论坛的时候,向服务器发送请求,服务器返回的一个标识字符串,所以在登陆论坛时,我们就要把服务器返回的CEFS记录起来,然后填写到回帖的数据包里面。
我模拟了一次登陆论坛,同时用WPE截取数据包,截取到这样的数据包:POST /index.php?prog=user::login HTTP/1.1..Accept: image/gif,image/x-xbitmap, image/jpeg,image/pjpeg, */*..Referer:/index.php?..Accept-Language: zh-cn..Content-Type: application/x-www-form-urlencoded..Accept-Encoding:gzip, er-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)..Host:..Content-Length: 70..Connection: Keep-Alive..Cache-Control: no-cache..Cookie:ce_tjbbspassword=;ce_tjbbsuserid=ername=阿东&password=XXXXXXXXX&show=1&image.x=24&image.y=13向服务器发送该数据包后,如果成功登陆,服务器返回数据包HTTP/1.1 200 OK..Date: Thu, 09 Dec 2004 13:18:18 GMT..Server: Apache/1.3.29 (Unix)mod_jk/1.2.5 PHP/4.3.4..X-Powered-By: PHP/4.3.4..Set-Cookie:CEFS=4da4e5e68db9b4750441afcb818b2c0f; path=/..Expires: Thu, 19 Nov 1981 08:52:00GMT..Cache-Control: no-store, no-cache, must-revalidate, post-check=0,pre-check=0..Pragma:no-cache..Content-Encoding: gzip..Keep-Alive: timeout=15,max=87..Connection: Keep-Alive..Transfer-Encoding: chunked..Content-Type:text/html....212..........x..SAk.@.....G.D.M....L<.".....$.638...t..od..Y(h.PW......n.<..C.......nve[....7.........Dx.B.0.........>...~.t.'G..?<......d.#`Z...`.......d.$..到目前为止,关于数据包的东西已经基本足够你写一个灌水程序了你只需要做的就是用SOCKET连接同济论坛服务器的HTTP端口,登陆,记录CEFS,利用该CEFS,每隔60秒向该端口发送数据包~~n_n~以下为灌水程序的片断(经过一些修改):char hdrreg[]="POST /index.php?prog=user::login HTTP/1.1\r\n""Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,application/x-shockwave-flash,*/*\r\n""Referer: /index.php?\r\n""Accept-Language: zh-cn\r\n""Content-Type: application/x-www-form-urlencoded\r\n""Accept-Encoding: gzip, deflate\r\n""User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; iOpus-I-M)\r\n" "Host: \r\n""Content-Length: %d\r\n""Connection: Keep-Alive\r\n""Cache-Control: no_cache\r\n""Cookie: ce_tjbbsuserid; ce_tjbbspassword;\r\n""\r\n";char regcontent[]="username=%s&password=%s&show=1&image.x=14&image.y=8"; char hdrreply[]="POST /index.php?prog=topic::reply&tid=%s HTTP/1.1\r\n""Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,application/x-shockwave-flash,*/*\r\n""Referer:/index.php?prog=topic::flat&tid=%s&page=end\r\n" "Accept-Language: zh-cn\r\n""Content-Type: application/x-www-form-urlencoded\r\n""Accept-Encoding: gzip, deflate\r\n""User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; iOpus-I-M)\r\n" "Host: \r\n""Content-Length: %d\r\n""Connection: Keep-Alive\r\n""Cache-Control: no_cache\r\n""Cookie: CEFS=%s\r\n""\r\n";char rlytitle[]="title=%s&cetag=checked&autoParseURL=checked&smiles=checked&showsign=checked&content=%s&parentid=0";//登陆:char buf_h[1024];char buf_c[1024];char *p;char serverIP[]="61.129.64.163";u_short serverPort=u_short(80);destAddr = inet_addr(serverIP);memcpy(&destSockAddr.sin_addr, &destAddr, sizeof(destAddr)); destSockAddr.sin_port = htons(serverPort);destSockAddr.sin_family = AF_INET;destSocket = socket(AF_INET, SOCK_STREAM, 0);if (destSocket == INVALID_SOCKET){//errorreturn false;}status = connect(destSocket, (LPSOCKADDR)&destSockAddr,sizeof(destSockAddr));if (status == SOCKET_ERROR){//errorreturn false;}wsprintf(buf_c,regcontent,"阿东","密码****");wsprintf(buf_h,hdrreg,char(strlen(buf_c)));strcat(buf_h,buf_c);strcat(buf_h,&charend);numsnt = send(destSocket, buf_h, strlen(buf_h), 0);if (numsnt != (int)strlen(buf_h)){//errorreturn false;}numrcv=recv(destSocket, buf_h,strlen(buf_h) , 0);if ((numrcv == 0) || (numrcv == SOCKET_ERROR)){//errorreturn false;}//省略部分代码p=buf_h;p+=144;memcpy(cefs,p,4);if(cefs[0]!='C'){//errorreturn false;}p=buf_h;p+=149;memcpy(cefs,p,32);cefs[32]='{post.content}';//发贴char buf_h[1024];char buf_c[1024];//...省略部分代码char cbuf[50];char serverIP[]="61.129.64.163";u_short serverPort=u_short(80);int pid;CString strpid;while(1){destAddr = inet_addr(serverIP);memcpy(&destSockAddr.sin_addr, &destAddr, sizeof(destAddr)); destSockAddr.sin_port = htons(serverPort);destSockAddr.sin_family = AF_INET;destSocket = socket(AF_INET, SOCK_STREAM, 0);if (destSocket == INVALID_SOCKET){//errorreturn false;}status = connect(destSocket, (LPSOCKADDR)&destSockAddr, sizeof (destSockAddr));if (status == SOCKET_ERROR){//errorreturn false;}//////////////////////////wsprintf(buf_c,rlytitle,"大家好","路过,再水一下,莫怪");int len=strlen(buf_c);//随机产生要灌水的帖子PIDpid=rand()%1000;strpid.Format("%d",218000+pid);wsprintf(buf_h,hdrreply,strpid,strpid,unsigned char(len),cefs); strcat(buf_h,buf_c);//省略部分代码numsnt = send(destSocket, buf_h, strlen(buf_h), 0);if (numsnt != (int)strlen(buf_h)){//errorbreak;;}numrcv=recv(destSocket, buf_h,strlen(buf_h) , 0);if ((numrcv == 0) || (numrcv == SOCKET_ERROR)){//errorbreak;}//省略部分代码closesocket(destSocket);for (int i=0;i<60;i++){Sleep(1000);if (WaitForSingleObject(hEnd,0)!=WAIT_TIMEOUT) {return 0;}}}。