目前电子商务采用的处理模式大多是订货用户在网页上填写订单,发出订货请求,接着WEB服务器上运行CGI程序对用户填写的数据进行一定的处理后,发送到专用的电子商务服务器中,服务器则对发来的用户数据进行一系列校验,验证用户身份及证实所需的订货信息完整后,将订单写入数据库中,并向WEB服务器中的CGI
程序发回一个交易成功的信息,证实
交易完成。
我们利用VC++的AppWizard创建一个支持MFC类的控制台模式程序(An application that support MFC),命名为“Eshopping”,修改主
程序文件EShopping.cpp如下:
#include "stdafx.h"
#include "EShopping.h"
#include "afxsock.h"
typedef struct OrderSet //用户自己定义的一个订货单结构
{
char UserName[24];
char Password;
char Goods[24];
int Count;
char Addr[256];
}ORDER;
……//省略部分机器生成代码
int _tmain(int argc, TCHAR* argv, TCHAR* envp)
{ if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{……//省略部分机器生成代码
}else //
程序处理的主体
{cout〈〈"Content-type:Text/HTML\n\n";
//输出回显给用户的HTML的头
cout〈〈"〈HTML〉〈HEAD〉〈TITLE〉〈/TITLE〉〈/HEAD〉〈BODY〉\n";
char *StreamSize=getenv("CONTENT_LENGTH"); //开始取得用户填写的信息
long dataSize=atol(StreamSize);
char* buffer[dataSize]=new char[dataSize];
::memset(buffer,0,dataSize);
cin〉〉buffer; //取得用户填写的信息
char Ware[256]; //这个数组用于从获取的字串中分离用户填写的数据
::memset(Ware,0,5256);
char* p=buffer;
int Row=0,Col=0;
while(Row〈5)//开始处理获取的字串
{if(*p= =''=''){//若在字串中遇到“=”号,意味着用户填写的一个项的开始
Col=0;
p++;
while(*p!=''&&'') { //若在字串中遇到“&&”号,意味着用户填写的一个项的结束
if(*p= =''+'') *p='' ''; //字串中的“+”号要转成空格
Ware[Row][Col++]=*p;
p++; }
Row++; }
p++;
}
ORDER Order;//处理完字串后,把用户填写的数据填写到一个ORDER结构中
memcpy(Order.UserName,Ware[0],24);
memcpy(Order.Password,Ware,12);
memcpy(Order.Goods,Ware,24);
int Counts=atoi(Ware);
Order.Count=Counts;
memcpy(Order.Addr,Ware,256);
WORD wVersionRequested; //开始连接到服务器上
WSADATA wsaData;
hostent FAR *hp;
wVersionRequested = MAKEWORD( 2, 0 );
WSAStartup( wVersionRequested, &&wsaData );
SOCKET sockClient= INVA