1. 创建一个Dialog Based项目:CSockClient。
2. 设计对话框
去掉Ok和Cancle两个按钮,增加ID_Connect(连接)、ID_Send(发送)、ID_Exit(关闭)按钮,增加ListBox控件IDC_LISTMSG和Edit控件IDC_EDITMSG,并按下表在ClassWizard中为CCSockClientDlg类添加变量。
Control ID Type Member
IDC_EDITMSG CEdit m_MSG
IDC_LISTMSG ClistBox m_MSGS
3. CAsyncSocket类用DoCallBack函数处理MFC消息,当一个网络事件发生时,DoCallBack函数按网络事件类型:FD_READ、FD_WRITE、FD_ACCEPT、FD_CONNECT分别调用OnReceive、OnSend、OnAccept、OnConnect函数。
由于MFC把这些事件处理函数定义为虚函数,所以要生成一个新的C++类,以重载这些函数,做法如下:以Public方式继承CAsyncSocket类,生成新类MySock;为MySock类添加虚函数OnReceive、OnConnect、OnSend。
4. 在MySock.ccp中添加以下代码
#include "CSockClient.h"
#include "CSockClientDlg.h"
5. 在MySock.h中添加以下代码
public:
BOOL m_bConnected //是否连接
UINT m_nLength //消息长度
char m_szBuffer[4096] //消息缓冲区
6. 在MySock.ccp中重载各函数
MySock::MySock()
{
m_nLength=0
memset(m_szBuffer,0,sizeof(m_szBuffer))
m_bConnected=FALSE
}
MySock::~MySock()
{
//关闭套接字
if(m_hSocket!=INVALID_SOCKET)
Close()
}
void MySock::OnReceive(int nErrorCode)
{
m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0)
//下面两行代码用来获取对话框指针
CCSockClientApp* pApp=(CCSockClientApp*)AfxGetApp()
CCSockClientDlg* pDlg=(CCSockClientDlg*)pApp- >m_pMainWnd
pDlg- >m_MSGS.InsertString(0,m_szBuffer)
memset(m_szBuffer,0,sizeof(m_szBuffer))
CAsyncSocket::OnReceive(nErrorCode)
}
void MySock::OnSend(int nErrorCode)
{
Send(m_szBuffer,m_nLength,0)
m_nLength=0
memset(m_szBuffer,0,sizeof(m_szBuffer))
//继续提请一个“读”的网络事件,接收Server消息
AsyncSelect(FD_READ)
CAsyncSocket::OnSend(nErrorCode)
}
void MySock::OnConnect(int nErrorCode)
{
if (nErrorCode==0)
{
m_bConnected=TRUE
CCSockClientApp* pApp=(CCSockClientApp*)AfxGetApp()
CCSockClientDlg* pDlg=(CCSockClientDlg*)pApp- >m_pMainWnd
memcpy(m_szBuffer,"Connected to ",13)
strncat(m_szBuffer,pDlg- >m_szServerAdr,
sizeof(pDlg- >m_szServerAdr))
pDlg- >m_MSGS.InsertString(0,m_szBuffer)
AsyncSelect(FD_READ) ////提请一个“读”的网络事件,准备接收
}
CAsyncSocket::OnConnect(nErrorCode)
}
7. 新建对话框IDD_Addr,用来输入IP地址和Port;生成新类CAddrDlg。增加两个Edit控件:IDC_Addr、IDC_Port按下表在ClassWizard中为CAddrDlg类添加变量。
Control ID Type Member
IDC_Addr CString m_Addr
IDC_Port Int m_Port
8. 在CSockClientDlg.ccp中添加代码:
#include "AddrDlg.h"
protected:
int TryCount
MySock m_clientSocket
UINT m_szPort
public:
char m_szServerAdr[256]
9. 双击IDD_CSOCKCLIENT_DIALOG对话框中的“连接”按钮,添加以下代码:
void CCSockClientDlg::OnConnect()
{
m_clientSocket.ShutDown(2)
m_clientSocket.m_hSocket=INVALID_SOCKET
m_clientSocket.m_bConnected=FALSE
CAddrDlg m_Dlg
//默认端口1088
m_Dlg.m_Port=1088
if (m_Dlg.DoModal()==IDOK && !m_Dlg.m_Addr.IsEmpty())
{
memcpy(m_szServerAdr,m_Dlg.m_Addr,sizeof(m_szServerAdr))
m_szPort=m_Dlg.m_Port
//建立计时器,每1秒尝试连接一次,直到连上或TryCount>10
SetTimer(1,1000,NULL)
TryCount=0
}
}
10. 添加Windows消息WM_TIMER响应函数OnTimer
void CCSockClientDlg::OnTimer(UINT nIDEvent)
{
if (m_clientSocket.m_hSocket==INVALID_SOCKET)
{
BOOL bFlag=m_clientSocket.Create(0,SOCK_STREAM,FD_CONNECT)
if(!bFlag)
{
AfxMessageBox("Socket Error!")
m_clientSocket.Close()
PostQuitMessage(0)
return
}
}
m_clientSocket.Connect(m_szServerAdr,m_szPort)
TryCount++
if (TryCount >=10 || m_clientSocket.m_bConnected)
{
KillTimer(1)
if (TryCount >=10)
AfxMessageBox("Connect Failed!")
return
}
CDialog::OnTimer(nIDEvent)
}
11. 双击IDD_CSOCKCLIENT_DIALOG对话框中的“发送”按钮,添加以下代码:
void CCSockClientDlg::OnSend()
{
if (m_clientSocket.m_bConnected)
{
m_clientSocket.m_nLength=m_MSG.GetWindowText
(m_clientSocket.m_szBuffer, sizeof(m_clientSocket.m_szBuffer))
m_clientSocket.AsyncSelect(FD_WRITE)
m_MSG.SetWindowText("")
}
}
12. 双击IDD_CSOCKCLIENT_DIALOG对话框中的“关闭”按钮,添加以下代码:
void CCSockClientDlg::OnExit()
{
//关闭Socket
m_clientSocket.ShutDown(2)
//关闭对话框
EndDialog(0)
}
12.运行此项目,连接时输入主机名或IP均可,CAsyncSocket类会自动处理。
二. 服务端
Server端的编程与Client端的类似,下面主要介绍他的Listen及Accept函数。
1. 建立一个CNewSocket类,重载CAsyncSocket类的OnReceive、OnSend函数,如何进行信息的显示和发送可以参考Client程序。本例中采用将收到信息原封不动发回的方法来实现Echo功能,代码如下:
CNewSocket::OnReceive(int nErrorCOde)
{
m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);
// 直接转发消息
AsyncSelect(FD_WRITE);
}
CNewSocket::OnSend(int nErrorCode)
{
Send(m_szBuffer,m_nLength,0);
}
2. 建立一个CMyServerSocket类,重载CAsyncSocket类的OnAccept函数代码如下
在MyServerSocket.h中声明变量
public::
CNewSocket* m_pSocket;
void CMyServerSocket::OnAccept(int nErrorCode)
{
//侦听到连接请求,调用Accept函数
CNewSocket* pSocket = new CNewSocket();
if (Accept(*pSocket))
{
pSocket- >AsyncSelect(FD_READ);
m_pSocket=pSocket;
}
else
delete pSocket;
}
3. 为对话框添加一个“侦听”按钮,添加如下代码:
在CsockServerDlg.ccp中声明变量
public:
CMyServerSocket m_srvrSocket
void CCSockServerDlg::OnListen()
{
if (m_srvrSocket.m_hSocket==INVALID_SOCKET)
{
BOOL bFlag=m_srvrSocket.Create
(UserPort,SOCK_STREAM,FD_ACCEPT);
if (!bFlag)
{
AfxMessageBox(“Socket Error!”);
M_srvrSocket.Close();
PostQuitMessage(0);
Return;
}
}
//“侦听”成功,等待连接请求
if (!m_srvrSocket。Listen(1))
{
int nErrorCode = m_srvrSocket.GetLastError();
if (nError!=WSAEWOULDBLOCK)
{
AfxMessageBox(“Socket Error!”);
M_srvrSocket.Close();
用system(" ")命令吧,括号中间是命令,能打开下面的东东,你试试notepad是txt的程序dxdiag---查看配置
systeminfo -----查看系统信息
msconfig---------系统配置实用程序
winver---------检查Windows版本
wmimgmt.msc----打开windows管理体系结构(WMI)
wupdmgr--------windows更新程序
wscript--------windows脚本宿主设置
write----------写字板
winmsd---------系统信息
wiaacmgr-------扫描仪和照相机向导
winchat--------XP自带局域网聊天
mem.exe--------显示内存使用情况
mspaint--------画图板
mstsc----------远程桌面连接
mplayer2-------媒体播放机
magnify--------放大镜实用程序
mmc------------打开控制台
mobsync--------同步命令
drwtsn32------ 系统医生
devmgmt.msc--- 设备管理器
dfrg.msc-------磁盘碎片整理程序
diskmgmt.msc---磁盘管理实用程序
dcomcnfg-------打开系统组件服务
ddeshare-------打开DDE共享设置
dvdplay--------DVD播放器
net stop messenger-----停止信使服务
net start messenger----开始信使服务
notepad--------打开记事本
nslookup-------网络管理的工具向导
ntbackup-------系统备份和还原
narrator-------屏幕“讲述人”
ntmsmgr.msc----移动存储管理器
ntmsoprq.msc---移动存储管理员*作请求
netstat -an----(TC)命令检查接口
syncapp--------创建一个公文包
sysedit--------系统配置编辑器
sigverif-------文件签名验证程序
sndrec32-------录音机
shrpubw--------创建共享文件夹
secpol.msc-----本地安全策略
syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
services.msc---本地服务设置
Sndvol32-------音量控制程序
sfc.exe--------系统文件检查器
sfc /scannow---windows文件保护
tsshutdn-------60秒倒计时关机命令
tourstart------xp简介(安装完成后出现的漫游xp程序)
taskmgr--------任务管理器
eventvwr-------事件查看器
eudcedit-------造字程序
explorer-------打开资源管理器
packager-------对象包装程序
perfmon.msc----计算机性能监测程序
progman--------程序管理器
regedit.exe----注册表
rsop.msc-------组策略结果集
regedt32-------注册表编辑器
rononce -p ----15秒关机
regsvr32 /u *.dll----停止dll文件运行
regsvr32 /u zipfldr.dll------取消ZIP支持
cmd.exe--------CMD命令提示符
chkdsk.exe-----Chkdsk磁盘检查
certmgr.msc----证书管理实用程序
calc-----------启动计算器
charmap--------启动字符映射表
cliconfg-------SQL SERVER 客户端网络实用程序
Clipbrd--------剪贴板查看器
conf-----------启动netmeeting
compmgmt.msc---计算机管理
cleanmgr-------好东西整理
ciadv.msc------索引服务程序
osk------------打开屏幕键盘
odbcad32-------ODBC数据源管理器
oobe/msoobe /a----检查XP是否激活
lusrmgr.msc----本机用户和组
logoff---------注销命令
iexpress-------木马捆绑工具,系统自带
Nslookup-------IP地址侦测器
fsmgmt.msc-----共享文件夹管理器
utilman--------辅助工具管理器
gpedit.msc-----组策略
xp下运行命令大全.
$Systemroot$Documents and Settingsusername 目录下
appwiz.cpl------------添加删除程序
control userpasswords2--------用户帐户设置
cleanmgr-------垃圾整理
CMD--------------命令提示符可以当作是 Windows 的一个附件,Ping,Convert 这些不能在图形环境下 使用的功能要借助它来完成。
cmd------jview察看Java虚拟机版本。
command.com------调用的则是系统内置的 NTVDM,一个 DOS虚拟机。它完全是一个类似 Virtual PC 的 虚拟环境,和系统本身联系不大。当我们在命令提示符下运行 DOS 程序时,实际上也 是自动转移到 NTVDM虚拟机下,和 CMD 本身没什么关系。
calc-----------启动计算器
chkdsk.exe-----Chkdsk磁盘检查
compmgmt.msc---计算机管理
conf-----------启动 netmeeting
control userpasswords2-----User Account 权限设置
devmgmt.msc--- 设备管理器
diskmgmt.msc---磁盘管理实用程序
dfrg.msc-------磁盘碎片整理程序
drwtsn32------ 系统医生
dvdplay--------启动Media Player
dxdiag-----------DirectX Diagnostic Tool
gpedit.msc-------组策略编辑器
gpupdate /target:computer /force 强制刷新组策略
eventvwr.exe-----事件查看器
explorer-------打开资源管理器
logoff---------注销命令
lusrmgr.msc----本机用户和组
msinfo32---------系统信息
net start (servicename)----启动该服务
net stop (servicename)-----停止该服务
notepad--------打开记事本
nusrmgr.cpl-------同control userpasswords,打开用户帐户控制面板
Nslookup-------IP地址侦测器
oobe/msoobe /a----检查XP是否激活
perfmon.msc----计算机性能监测程序
progman--------程序管理器
route print------查看路由表
rononce -p ----15秒关机
rsop.msc-------组策略结果集
5回答者: m584880952 - 助理 二级 3-3 02:37
我来评论>>相关内容
? WINDOWS XP 运行命令详解 介绍每个命令的用法
? windows-xp运行命令
? WINDOWS XP运行命令都有什?
? 必备资料 103个Windows XP运行命令
? 103个Windows XP运行命令
更多相关问题>>
查看同主题问题:命令
其他回答共 3 条
开始→运行→输入的命令集锦
你可以
命令行下输入 help 就可以看到很多系统命令,每个命令得用法 例如 ping /? 可以获取系统帮助
gpedit.msc-------------------------组策略
sndrec32-------------------------录音机
nslookup-------------------------ip地址侦测器
explorer-------------------------打开资源管理器
logoff--------------------------注销命令
tsshutdn-------------------------60秒倒计时关机命令
lusrmgr.msc-------------------------本机用户和组
services.msc-------------------------本地服务设置
oobe/msoobe /a----------------------检查xp是否激活
notepad--------------------------打开记事本
cleanmgr-------------------------垃圾整理
net start messenger-----------------开始信使服务
compmgmt.msc-------------------------计算机管理
net stop messenger-----------------停止信使服务
conf-------------------------启动
dvdplay-------------------------dvd播放器
charmap-------------------------启动字符映射表
diskmgmt.msc-------------------------磁盘管理实用程序
calc-------------------------启动计算器
dfrg.msc-------------------------磁盘碎片整理程序
chkdsk.exe-------------------------chkdsk磁盘检查
devmgmt.msc--- ----------------------设备管理器
regsvr32 /u *.dll-------------------停止dll文件运行
drwtsn32------ -------------------系统医生
rononce -p ------------------------15秒关机
dxdiag-------------------------检查directx信息
regedt32-------------------------注册表编辑器
msconfig.exe-------------------------系统配置实用程序
rsop.msc-------------------------组策略结果集
mem.exe-------------------------显示内存使用情况
regedit.exe-------------------------注册表
winchat-------------------------xp自带局域网聊天
progman-------------------------程序管理器
winmsd-------------------------系统信息
perfmon.msc-------------------------计算机性能监测程序
winver-------------------------检查windows版本
sfc /scannow-----------------------扫描错误并复原
winver-------------------------检查windows版本
wmimgmt.msc-------------------------打开windows管理体系结构
wupdmgr-------------------------windows更新程序
w脚本---------------------------windows脚本宿主设置
write-------------------------写字板
winmsd-------------------------系统信息
wiaacmgr-------------------------扫描仪和照相机向导
winchat-------------------------xp自带局域网聊天
mem.exe-------------------------显示内存使用情况
msconfig.exe-------------------------系统配置实用程序
mplayer2-------------------------简易
mspaint-------------------------画图板
mstsc-------------------------远程桌面连接
mplayer2-------------------------媒体播放机
magnify-------------------------放大镜实用程序
mmc-------------------------打开控制台
mobsync-------------------------同步命令
dxdiag-------------------------检查directx信息
drwtsn32------------------------- 系统医生
devmgmt.msc-?----------------------设备管理器
dfrg.msc-------------------------磁盘碎片整理程序
diskmgmt.msc-------------------------磁盘管理实用程序
dcomcnfg-------------------------打开系统组件服务
ddeshare-------------------------打开dde共享设置
dvdplay-------------------------dvd播放器
net stop messenger-----------------停止信使服务
net start messenger-----------------开始信使服务
notepad-------------------------打开记事本
nslookup-------------------------网络管理的工具向导
ntbackup-------------------------系统备份和还原
narrator-------------------------屏幕“讲述人”
nyessmgr.msc-------------------------移动存储管理器
nyessoprq.msc-------------------------移动存储管理员 *** 作请求
netstat -an------------------------(tc)命令检查接口
syncapp-------------------------创建一个公文包
sysedit-------------------------系统配置编辑器
sigverif-------------------------文件签名验证程序
sndrec32-------------------------录音机
shrpubw-------------------------创建共享文件夹
secpol.msc-----====================本地安全策略
syskey---------================系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
services.msc---======================本地服务设置
sndvol32-------==================音量控制程序
sfc.exe--------=================系统文件检查器
sfc /scannow---======================windows文件保护
tsshutdn-------==================60秒倒计时关机命令
tourstart------===================xp简介(安装完成后出现的漫游xp程序)
taskmgr--------=================任务管理器
eventvwr-------==================事件查看器
eudcedit-------==================造字程序
explorer-------==================打开资源管理器
packager-------==================对象包装程序
perfmon.msc----=====================计算机性能监测程序
progman--------=================程序管理器
regedit.exe----=====================注册表
rsop.msc-------==================组策略结果集
regedt32-------==================注册表编辑器
rononce -p ----====================15秒关机
regsvr32 /u *.dll----===============停止dll文件运行
regsvr32 /u zipfldr.dll------=====取消zip支持
cmd.exe--------=================cmd命令提示符
chkdsk.exe-----====================chkdsk磁盘检查
ceryesgr.msc----=====================证书管理实用程序
calc-----------==============启动计算器
charmap--------=================启动字符映射表
cliconfg-------==================sql server 客户端网络实用程序
clipbrd--------=================剪贴板查看器
conf-----------==============启动
compmgmt.msc---======================计算机管理
cleanmgr-------==================垃圾整理
ciadv.msc------===================索引服务程序
osk------------=============打开屏幕键盘
odbcad32-------==================odbc数据源管理器
oobe/msoobe /a----==================检查xp是否激活
lusrmgr.msc----=====================本机用户和组
logoff---------================注销命令
iexpress-------==================木马捆绑工具,系统自带
nslookup-------==================ip地址侦测器
fsmgmt.msc-----====================共享文件夹管理器
utilman--------=================辅助工具管理器
这个要看具体代码。mfc程序的unicode字符集下,默认cstring等都是双字节存储,也就是wchar。很多系统类、函数的参数也是如此。
如果你cfile使用char
*进行读取,那么两种模式下不会有什么区别,如果是用tchar或者cstring就是不一样的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)