社区
网络编程
帖子详情
各位救命:CAsyncSocket创建失败的问题
thd111
2003-06-18 11:03:36
if(m_pSocket)
return -1;
m_pSocket = new CAsyncSocket;
if(!m_pSocket->Create()) ------>创建失败!说是资源不足
{
delete m_pSocket;
m_pSocket = NULL;
return -1;
}
请问各位:用MS的CAsyncSocket有什么要注意的地方么
...全文
345
24
打赏
收藏
各位救命:CAsyncSocket创建失败的问题
if(m_pSocket) return -1; m_pSocket = new CAsyncSocket; if(!m_pSocket->Create()) ------>创建失败!说是资源不足 { delete m_pSocket; m_pSocket = NULL; return -1; } 请问各位:用MS的CAsyncSocket有什么要注意的地方么
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
thd111
2003-08-04
打赏
举报
回复
解决了,其实很简单,谢谢大家的参与
thd111
2003-06-20
打赏
举报
回复
一些注释是乱码了,大家可以不用理会,在源码里有一段
m_pCallSocket = new CWinSocket;
if(!m_pCallSocket->Create())----------->报异常
{
delete m_pCallSocket;
m_pCallSocket = NULL;
return -1;
}
thd111
2003-06-20
打赏
举报
回复
下边是源码
#include "stdafx.h"
#include "deftype.h"
#include "ado.h"
#include "winsocket.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
LPREGISTERDOWNTERMINAL RegisterDownTerminal = NULL;
LPDELIVERRESPCALLBACK DeliverDownResp = NULL;
LPREPORTRESPCALLBACK ReportDownResp = NULL;
LPDOWNTERMINALCLOSE DownTerminalClose = NULL;
LPDOWNSERVERSTARTCALLBACK DownServerStart = NULL;
int m_nNo = 0;
BYTE m_bType = 0;
char m_szConstr[120];
CString strLocalIP="";
int m_nPort=0;
CWinSocket* m_pSocket = NULL;
CWinSocket* m_pCallSocket = NULL;
void WINAPI DOWNInit(LPREGISTERDOWNTERMINAL REGISTERDOWNTERMINAL,
LPDELIVERRESPCALLBACK DELIVERDOWNRESP,
LPREPORTRESPCALLBACK REPORTDOWNRESP,
LPDOWNTERMINALCLOSE DOWNTERMINALCLOSE,
LPDOWNSERVERSTARTCALLBACK DOWNSERVERSTARTCALLBACK
)
{
AfxSocketInit();
RegisterDownTerminal = REGISTERDOWNTERMINAL;
DeliverDownResp = DELIVERDOWNRESP;
ReportDownResp = REPORTDOWNRESP;
DownTerminalClose = DOWNTERMINALCLOSE;
DownServerStart = DOWNSERVERSTARTCALLBACK;
}
void WINAPI DOWNClose()
{
CADODatabase cDatabase;
cDatabase.Open(m_szConstr);
CADORecordset rs(&cDatabase);
rs.RefreshParam("prcCzDOWNCenter");
rs.SetParameterValue("@Czlb", (BYTE)3);
rs.SetParameterValue("@No", m_nNo);
rs.Open("prcCzDOWNCenter", CADORecordset::openStoredProc);
cDatabase.Close();
delete m_pSocket;
delete m_pCallSocket;
m_pSocket = NULL;
m_pCallSocket = NULL;
}
int WINAPI DOWNSvrOpen(int nNo, int nType, int nPort, char* szConstr)
{
CADODatabase cDatabase;
if(!cDatabase.Open(szConstr))
return -1;
m_pSocket = new CWinSocket;
if(!m_pSocket->Create(nPort))
{
delete m_pSocket;
m_pSocket = NULL;
return -1;
}
if(!m_pSocket->Listen())
{
delete m_pSocket;
m_pSocket = NULL;
return -1;
}
m_nNo = nNo;
m_bType = (BYTE)nType;
m_nPort = nPort;
strcpy(m_szConstr, szConstr);
char szComputerName[100];
DWORD nLen=100;
GetComputerName(szComputerName, &nLen);
szComputerName[nLen] = 0;
hostent* hp = gethostbyname(szComputerName);
struct in_addr ip;
memcpy(&ip, hp->h_addr, sizeof(ip));
strLocalIP = inet_ntoa(ip);
CADORecordset rs(&cDatabase);
//²éѯһ¸öÒѾÔÚÔËÐеĴ¦ÀíÖÐÐÄ
rs.RefreshParam("prcCxDOWNCenter");
rs.SetParameterValue("@Cxfs", (BYTE)1);
rs.Open("prcCzDOWNCenter", CADORecordset::openStoredProc);
if(!rs.IsEOF())
{
CString IP;
int port;
rs.GetFieldValue("IP", IP);
rs.GetFieldValue("Port", port);
m_pCallSocket = new CWinSocket;
if(!m_pCallSocket->Create())
{
delete m_pCallSocket;
m_pCallSocket = NULL;
return -1;
}
m_pCallSocket->Connect(IP, port);
}
rs.RefreshParam("prcCzDOWNCenter");
rs.SetParameterValue("@Czlb", (BYTE)1);
rs.SetParameterValue("@No", nNo);
rs.SetParameterValue("@Type", (BYTE)nType);
rs.SetParameterValue("@IP", strLocalIP);
rs.SetParameterValue("@Port", nPort);
rs.Open("prcCzDOWNCenter", CADORecordset::openStoredProc);
cDatabase.Close();
return 0;
}
int WINAPI DOWNDeliver(
long lSocket,
__int64 Sequence_No, //ÓÉÏ·¢´¦Àí¶ËΪÐÅÏ¢Éú³ÉÐÅÏ¢ÔÚ±¾¶ËµÄ±àºÅ
LPCTSTR CP_User, //CPÓû§Ãû
__int64 Msg_Id, //Èç¹ûÊÇÀ´×ÔCMPPµÄÏ·¢ÏûÏ¢£¬ÔòÎªÒÆ¶¯µÄMSG_ID£¬·ñÔòΪ0
char Sgip_Id[40], //Èç¹ûÊÇÀ´×ÔSGIPµÄÏ·¢ÏûÏ¢£¬ÔòΪÁªÍ¨µÄSEQUENCENO£¬·ñÔòΪ¿Õ
LPCTSTR Service_Type, //ÒµÎñ´úÂë
LPCTSTR Dest_termianl, //Ä¿µÄÖն˺ÅÂë
BYTE TP_pid, //GSMÐÒéÀàÐÍ
BYTE TP_udhi,//GSMÐÒéÀàÐÍ
BYTE Msg_Fmt, //ÐÅÏ¢¸ñʽ
LPCTSTR Src_terminal,//Ô´ºÅÂë
BYTE Msg_Length, //ÄÚÈݳ¤¶È
LPCTSTR Msg_Content //ÐÅÏ¢ÄÚÈÝ
)
{
return m_pSocket->Deliver(lSocket, Sequence_No, CP_User, Msg_Id, Sgip_Id, Service_Type,
Dest_termianl, TP_pid, TP_udhi, Msg_Fmt, Src_terminal, Msg_Length, Msg_Content);
}
int WINAPI DOWNReport(
long lSocket,
__int64 Sequence_No, //»Ø±¨µÄ¶ÌÏûÏ¢ÐÅÏ¢Âë
LPCTSTR Stat, //·¢ËͶÌÏûÏ¢µÄÓ¦´ð½á¹û
LPCTSTR Submit_time, //Ìύʱ¼ä YYMMDDHHMM
LPCTSTR Done_time, //´¦Àíʱ¼ä YYMMDDHHMM
LPCTSTR Dest_terminal_Id //Ä¿µÄÖÕ¶ËMSISDNºÅÂë(SP·¢ËÍCMPP_SUBMITÏûÏ¢µÄÄ¿±êÖÕ¶Ë)
)
{
return m_pSocket->Report(lSocket, Sequence_No, Stat, Submit_time, Done_time, Dest_terminal_Id);
}
void FillCharBuffer(char* szDest, const char* szSource, int nLen)
{
int len = (int)strlen(szSource)>nLen?nLen:strlen(szSource);
memcpy(szDest, szSource, nLen);
}
Healer
2003-06-20
打赏
举报
回复
同意, 多给代码吧, 这上哪里找错啊?
alanwang_
2003-06-20
打赏
举报
回复
是第一次就失败还是执行多次之后才失败?
试着把数据库访问什么的都去掉,只留下socket部分,看看还有没有错!
注意m_pCallSocket的delete
CWinSocket类重要部分的代码!
不录
2003-06-20
打赏
举报
回复
CWinSocket是不是你自己派生的类,贴出来瞧瞧。
Richuen22
2003-06-19
打赏
举报
回复
你继承它的子类就不要
m_pSocket = new CAsyncSocket;
应为 //如CMyAsync为继承CAsyncSocket的
CMyAsync m_pSocket; //在XXX.h中
m_pSocket = new CMyAsync;
shilong
2003-06-19
打赏
举报
回复
建议加上:AfxSocketInit();
如果不行在Create后面加上这些代码查错
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
);
TRACE(lpMsgBuf );
ftp127
2003-06-19
打赏
举报
回复
用Getlasterror()得到错误,到MSDN里去查一下。
ftp127
2003-06-19
打赏
举报
回复
if(!m_pSocket->Create()) ------>创建失败!说是资源不足
{
delete m_pSocket;
m_pSocket = NULL;
return -1;
}
若改成下面呢?
if(!m_pSocket->Create()) ------>创建失败!说是资源不足
{
m_pSocket = NULL;
delete m_pSocket;
return -1;
}
不录
2003-06-19
打赏
举报
回复
你说wincore.cpp有异常,那就偏你的问题太远了,除非把源代码给大家,不然大家在这儿只是在大海捞针的找问题。
Healer
2003-06-19
打赏
举报
回复
晕, 我中文和英文互译的本事不好, 你说资源不足?? 什么意思啊?? 我好像没有见过这个问题,
关于m_pSocket在哪里定义的啊, 都列出来吧??
thd111
2003-06-19
打赏
举报
回复
各位:我现在是这样定义的
CWinSocket 由 CAsyncSocket继承
if(m_pSocket)
return -1;
m_pSocket = new CWinSocket;
if(!m_pSocket->Create()) ------>创建失败!说是资源不足
{
delete m_pSocket;
m_pSocket = NULL;
return -1;
}
Healer
2003-06-19
打赏
举报
回复
单纯看你的代码是没有错误的了,
还有建议你, 用异步Socket类, 一定要继承一次了,
还有, 那个CAnsyncSocket是不是含有纯虚函数啊?? (大汗)
[估计是了, 这叫什么啊, 抽象类不能建立对象, 但是可以构造对象的指针了.]
thd111
2003-06-19
打赏
举报
回复
为什么会出现取实例句柄失败呢???
thd111
2003-06-19
打赏
举报
回复
我也已经调用AfxSocketInit();
thd111
2003-06-19
打赏
举报
回复
我现在跟到原码里,发现
HINSTANCE hInst=AfxGetInstanceHandle();包异常
原因:Debug Assertion Failed!
文件:wincore.cpp
各位侃侃是什么回事
不录
2003-06-19
打赏
举报
回复
应该是你没有AfxSocketInit();
可以看一下CAsyncSocket::Create的源代码
BOOL CAsyncSocket::Create(UINT nSocketPort, int nSocketType,
long lEvent, LPCTSTR lpszSocketAddress)
{
if (Socket(nSocketType, lEvent))
{
if (Bind(nSocketPort,lpszSocketAddress))
return TRUE;
int nResult = GetLastError();
Close();
WSASetLastError(nResult);
}
return FALSE;
}
其实Bind至少是要先WSAStartup才行的。另外别忘记查看WSAGetLastError()
thd111
2003-06-18
打赏
举报
回复
我这是做了一个DLL,调用的时候就出现这个问题,晕
thd111
2003-06-18
打赏
举报
回复
对了,是不是对外部变量的定义有什么要求?
加载更多回复(4)
MFC疑难注解:
CA
sync
Socket
及C
Socket
MFC疑难注解:
CA
sync
Socket
及C
Socket
CA
syn
Socket
详解+经典实例
包含了
CA
syn
Socket
详细讲解,并附有一个用
CA
syn
Socket
编写的基于(多)C/(1)S的异步非阻塞的聊天小程序,此内容非常适合初学者!整理出来,大家一起学习!
CA
SYNC
SOCKET
有讲解文档 适合初学者 通过消息调用来验证函数调用过程
MFC下使用
CA
sync
Socket
类建立TCP客户端与服务器.zip
MFC下使用
CA
sync
Socket
类建立TCP客户端与服务器, 主要进行继承
CA
sync
Socket
类并重写它的虚函数, 工程分为服务器端与客户端, 可分别进行发送与接收数据, 并带有详细注释
使用
CA
sync
Socket
类实现异步网络通信
使用
CA
sync
Socket
类实现异步网络通信
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章