win32控制台Socket程序,考虑做成服务,用到MFC,继承了CAsyncSocket,但是创建socket对象时总是不成功,请问是什么原因?
是win32控制台下不能用CAsyncSocket吗?还是具体操作的其他原因?源代码如下(CClient、CServer继承自CAsyncSocket)
/////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "HHH.h"
#include "afxmt.h"
#include "CTUClient.h"
#include "CTUServer.h"CClient clientSocket;
CServer serverSocket;using namespace std;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0; // 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("致命错误:MFC 初始化失败\n"));
nRetCode = 1;
}
else
{ serverSocket.Create(2003,SOCK_STREAM,FD_ACCEPT);//这里总是返回0 值
serverSocket.Listen(); //这里也总是返回0值 cout<<endl;
cout<<endl;
getchar();
} return nRetCode;
}
是win32控制台下不能用CAsyncSocket吗?还是具体操作的其他原因?源代码如下(CClient、CServer继承自CAsyncSocket)
/////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "HHH.h"
#include "afxmt.h"
#include "CTUClient.h"
#include "CTUServer.h"CClient clientSocket;
CServer serverSocket;using namespace std;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0; // 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("致命错误:MFC 初始化失败\n"));
nRetCode = 1;
}
else
{ serverSocket.Create(2003,SOCK_STREAM,FD_ACCEPT);//这里总是返回0 值
serverSocket.Listen(); //这里也总是返回0值 cout<<endl;
cout<<endl;
getchar();
} return nRetCode;
}
解决方案 »
- 关于设置开机自动运行
- 用ODBC操作EXCEL出现的问题
- 急!一个关于动态新增菜单的问题
- 关于线程同步Lock
- VC的配置问题
- 一个Dll程序A,隐式链接另外一个Dll程序B,在不改动A的情况下,有没有办法在B里面知道A是否处在调试状态?
- ListCtrl里弹出右键菜单后,点击菜单里的某一项再弹出一个对话框?
- memset的用法?
- 在CEDITVIEW中用TEXTOUT输出的文本,如何使用SCROLLBAR控制浏览呢?
- 关于IDataObject的问题
- ftp下载中的断点重传
- 哪位大侠能帮我研究< MyICQ 0.9b2 >(服务器端),并提供一些详细一点的文档,本人源奉上1000分,另感激不尽
WORD wVersionRequested,
LPWSADATA lpWSAData
);
你把这个函数加到函数的开始处,就好了。
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != NO_ERROR )
return FALSE;
把以上这段代码加到serverSocket.Create(2003,SOCK_STREAM,FD_ACCEPT);上面就可以了。
再普通的服务程序中不可创建窗口,否则服务启动失败。CAsyncSocket 其实是利用window消息机制实现的,所以失败
WSAStartup(MAKEWORD(2,2),&m_data);
加在定义SOCKET之前