使用socket套接字时的两点经验
2010-07-27 13:36
232 查看
使用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()函数得到错误的编号。但是得到的编号是整形量,对调试没有意义,所以建议大家可以使用下面的程序得到中文错误信息。
这就是我的2点经验,希望对初学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的朋友有所帮助。
相关文章推荐
- 使用socket套接字时的两点经验
- 使用TCP/IP的套接字(Socket)进行通信
- HandlerSocket使用经验
- socket套接字使用的结构体
- 使用DatagramSocket发送、接收数据(Socket之UDP套接字)
- 使用TCP/IP的套接字(Socket)进行通信
- 使用socket()函数创建套接字
- 使用DatagramSocket发送、接收数据(Socket之UDP套接字)
- c# socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次
- Linux C语言编程-Linux网络通信--Linux上使用套接字(socket)来发送信息---知识点总结+实例
- socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次
- Java套接字socket的使用
- 使用TCP/IP的套接字(Socket)进行通信
- linux下使用fread读socket套接字的注意点
- Windows Socket API 使用经验
- 嵌入式 (unix domain socket本地套接字)使用udp发送>=128K的消息会报ENOBUFS的错误
- 使用socket套接字通过http协议实现文档下载功能
- Windows Socket API 使用经验
- python-基于UDP通信的套接字,socketserver模块的使用
- c# socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次