网络编程中GetLastError函数的错误代码是怎么获得的?

wuglad 2004-09-02 11:45:42
我的程序中用GetLastError()获取的错误代码就是0。
我该怎么做才能得到相应的错误提示呢。
并且,按照我下面的代码,GetLastError是不是获取的listen函数的的返回值呢?


serverSock.Create(m_iport);//成功返回非零值
serverSock.Listen();//成功返回非零值
static int error=GetLastError();

if(error()==0)
{
switch(error())
{
case WSANOTINITIALISED:
AfxMessageBox("在调用本API之前应成功调用WSAStartup()。");
break;
case WSAENETDOWN:
AfxMessageBox("网络子系统失效");
break;
case WSAEAFNOSUPPORT:
AfxMessageBox("The specified address family is not supported");
break;
case WSAEADDRINUSE:
AfxMessageBox("所指地址已被使用");
break;
case WSAEINPROGRESS:
AfxMessageBox("一个阻塞的WinSock调用正在进行中,或者服务提供者仍在处理一个回调函数。");
break;
case WSAEMFILE:
AfxMessageBox("无可用文件描述字");
break;
case WSAENOBUFS:
AfxMessageBox("无可用缓冲区空间");
break;
default:
CString s;
s.Format("%d",GetLastError());
MessageBox(s,"服务器套接口错误",MB_OK);
break;
}
else
MessageBox("套接字创建成功");
...全文
143 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nobounded 2004-09-03
  • 打赏
  • 举报
回复
你用VC里的Error Look软件看一下,其实WSAGetLastError()返回非0值才表示错了,返回0值表示操作成功了。和你的函数返回值不是一回事,它有特定的错误代码,MS定义了一部分,你也可以自己定义。
DentistryDoctor 2004-09-02
  • 打赏
  • 举报
回复
WSAGetLastError();
获取错误信息不用这么麻烦。FormatMessage就行了。
wuglad 2004-09-02
  • 打赏
  • 举报
回复
我用了WSAGetLastError(),返回的错误值依然是0。可是用FormatMessage就提示“操作成功完成”。可是WSAGetLastError()如果正确的话返回的是非0值啊,既然为0,那就说明不正确,那为什么FormatMessage还提示“操作成功完成”呢?
xxedge 2004-09-02
  • 打赏
  • 举报
回复
函数用错了,socket相关的是WSAGetLastError()
static int error=WSAGetLastError();
先把这个改掉后再看错误码
另外,关于socket的message需要LoadLibrary才能正确显示出来的。
softworms 2004-09-02
  • 打赏
  • 举报
回复
在VC调试界面的监视一栏新建一个变量名:@err,hr
之后这个变量的内容就是错误提示了.
wuglad 2004-09-02
  • 打赏
  • 举报
回复
我在Listen函数后面加入如下FormatMessage代码,用FormatMessage就提示“操作成功完成”而直接用GetLastError就返回0。可是返回0应该是操作不成功啊。
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf, 0, NULL );

// Process any inserts in lpMsgBuf.

// Display the string.
AfxMessageBox( (LPCTSTR)lpMsgBuf);

// Free the buffer.
LocalFree( lpMsgBuf );
shilong 2004-09-02
  • 打赏
  • 举报
回复
VOID CheckLastError()
{

LPVOID lpMsgBuf;
if (FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
))
TRACE( "%s" , lpMsgBuf );
}
wuglad 2004-09-02
  • 打赏
  • 举报
回复
具体怎么写?(最好是中文解释)
第3章 开发环境 65 3.1 扩展开发环境 66 0136 利用VBScript脚本扩展Visual C++开发环境 66 0137 在Visual C++集成开发环境定制自己的工具栏 70 0138 向Visual C++开发环境添加插件 71 3.2 编译程序 72 0139 头文件的预编译 72 0140 Debug版本与Release版本的区别 72 0141 如何编译Unicode版本的应用程序 72 0142 Visual C++加快链接速度 72 0143 强制编译器生成内联代码 72 0144 如何禁止函数内联 72 0145 如何让控制台应用程序支持MFC类库 73 3.3 编程技巧 73 0146 在代码编辑器使用代码录制功能 73 0147 快速调整控件的Tab键顺序 73 0148 从位图获取工具条资源 73 0149 从其他文件抓取资源 74 0150 生成自定义的关键字 74 0151 利用Visual C++修改可执行文件的图标 74 0152 如何使用源代码浏览工具 74 0153 在一个工作区管理多个工程 75 0154 如何将控件分组 75 0155 注册自己的对话框模板 75 0156 如何彻底地从工程删除一个类 75 0157 在类向导处理没有发现的窗口消息 76 0158 如何导入lib文件 76 0159 完全取词功能不可用 76 0160 判断代码的括号是否匹配 76 0161 如何对齐零乱的代码 77 0162 显示函数参数 77 0163 在类向导处理没有发现的窗口消息 77 0164 如何汉化可执行文件 77 0165 查看Exe或Dll文件的资源 78 0166 _T()在代码的含义 78 0167 运行时库和静态库与DLL的比较 78 0168 快速删除项目下Debug 文件夹临时文件 78 0169 Visual C++文件扩展名介绍 78 0170 Visual C++快捷键 79 3.4 程序调试 82 0171 在发行版本调试程序 82 0172 在Visual C++如何进行远程调试 82 0173 利用简单断点进行程序调试 82 0174 利用数据断点进行程序调试 83 0175 利用条件断点进行程序调试 84 0176 利用消息断点进行程序调试 85 0177 检测内存泄漏 86 0178 利用Watch调试窗口查看对象信息 87 0179 利用Call Stack窗口查看函数调用信息 87 0180 利用Memory窗口查看内存信息 88 0181 利用Variables窗口查看变量信息 88 0182 利用Registers窗口查看CPU寄存器信息 89 0183 利用Disassembly窗口查看汇编信息 90 0184 如何确定GetLastError返回的错误代码的含义 91 0185 在Watch窗口获得当前线程的最后错误代码 91 0186 调试Dll 92 0187 如何调试指针数组 92

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧