您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:92 来源:vckbase.com

使用socket套接字时的两点经验

作者:刘霞

  最近我在使用socket编程的工作,总结了2点经验,希望和大家分享一下。由于是菜鸟,有不对的地方还希望多多指教。
逆风者
  第一点经验就是在创建新的套接字之前还需要调用一个引入Ws2_32.dll库的函数。否则服务器和客户端连不上。
  由于初次使用socket,所以查了很多资料,但是发现一个问题,不知道为什么按照资料上的步骤调用函数,但是最后却连接不上,详细查过MSDN后,才发现大部分的资料上都是从调用socket开始,其实在这之前还有一个初始化的函数需要调用。
  如果使用Platform SDK:Windows Sockets,在调用socket函数创建新的sockets之前要先调用WSAStartup函数。WSAStartup函数作用是引入Ws2_32.dll库。根据MSDN上说,WSAStartup函数必须是应用程序或DLL调用的第一个Windows Sockets函数,它允许应用程序或者DLL指定需要的Windows Sockets版本和重新找回指定的Windows Sockets执行的细节。只有在成功的调用WSAStartup函数之后才能进一步使用接下来的Windows Sockets函数。
  同理,如果使用的是MFC包装的CSocket类,需要在调用Cresat创建新的套接字之前调用AfxSocketInit函数。AfxSocketInit函数包装的是WSAStartup函数,作用是相同的。
  第二点经验就是使用socket编程时,每调用一个函数如bind,listen等,如果出错可以使用WSAGetLastError ()函数得到错误的编号,如果是MFC的CSocket类,使用GetLastError()函数得到错误的编号。但是得到的编号是整形量,对调试没有意义,所以建议大家可以使用下面的程序得到中文错误信息。

LPVOID lpMsgBuf;

FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError(), 

        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //默认语言

          (LPTSTR)&lpMsgBuf, 0, NULL );

//显示

MessageBox(0,(LPCTSTR)lpMsgBuf,_T("GetLastError"),MB_OK|MB_ICONINFORMATION );



//释放内存

    ::LocalFree( lpMsgBuf );

这就是我的2点经验,希望对初学socket的朋友有所帮助。
 

相关文章

Visual Basic .NET 中多 Windows 窗体的同步
可以替代系统记事本的程序
论程序设计方法
图形显示特技算法
SQL Server 索引结构及其使用(三)
简单实用的Xml解析类
一个实用的CToolBar扩展类CToolBarEx
定时显示远程计算机的桌面
《系统飞狐》系列软件中的“系统监视器”开
自绘按钮的实现
如何使用BHO定制你的Internet Explorer浏览
DLL初学者指南(非MFC)
VC中基于 Windows 的精确定时
模拟 Windows 下 CPU 占用率的控件及其实现
自动隐藏停泊窗体实现
Buffer Overruns,portability和其它...
在你的程序中如何使用CButtonST类
QQ2006 界面编程之鸡蛋里挑骨头
用 Web 服务进行二进制序列化和 BinaryForm
DLL头文件的格式和应用

相关评论


本文章所属分类:首页 VC++

  热门关键字: