网络编程中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("套接字创建成功");
...全文
157 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
具体怎么写?(最好是中文解释)

18,363

社区成员

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

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