社区
网络编程
帖子详情
各位救命: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有什么要注意的地方么
...全文
367
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写文章
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)
CA
sync
Socket
::Create()
本文详细介绍了
CA
sync
Socket
类的使用方法,包括如何
创建
Socket
对象,处理
Socket
事件,以及如何避免常见的错误。重点讨论了如何在非阻塞模式下进行
Socket
操作,以及如何通过事件回调来实现异步通信。此外,文章还提供了实例代码和注意事项,帮助开发者高效利用
CA
sync
Socket
完成复杂网络编程任务。
CA
sync
Socket
中Create
失败
本文介绍在BOOLC...App::InitInstance()函数中加入检查Afx
Socket
Init是否成功的方法,并在
失败
时显示错误消息并返回FALSE,确保程序的稳定性和用户体验。
方法二:
CA
sync
Socket
类
本文详细介绍了Visual C++中用于开发Windows
Socket
应用程序的
CA
sync
Socket
类。涵盖了类的主要方法,如Create、Bind、Connect等,以及关键事件如OnConnect、OnReceive等。
MFC基于
CA
sync
Socket
套接字客户端代码示范
博客提供了vs2015_MFC
Socket
Client客户端源码的下载,解压密码为blog.csdn.net/txwtech。介绍了MFC基于
CA
sync
Socket
套接字客户端代码示范,包含
创建
步骤、调试、关键代码等内容,还给出了套接字
CA
sync
Socket
调用connect未触发onConnect的解决方法。
CA
sync
Socket
进行UDP通信
本文介绍了一个使用
CA
sync
Socket
实现的UDP通信案例,包括客户端和服务端代码。客户端通过定时器接收服务端发来的数据,并显示出来;服务端则定时发送数据到客户端。
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章