求助达人:SOCKET()函数返回值异常的问题

於黾 2010-12-11 02:46:41
新建C++工程,利用SOCKET从以太网中读取数据,写入数据库中,数据库用的是ADO连接,C++版本是6.0

现在的现象是:必须配ODBC数据源(即使是错误的也可以,但是必须有这个名字),然后还要执行连接数据库的语句,SOCKET()返回值才是正常的1000左右,否则就会变成一个10位数,很诡异,不知道哪里出了问题。

代码如下:
s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
IPPROTO_TCP的值是6,我改成IPPROTO_IP(值是0)现象还是一样。
而我照着做的样本工程,也是同样的代码,就没有这个问题,现在不明白差在哪。

ADO连接我用了msado15.dll,
AfxOleInit(); //初始化COM库,
m_pConnection.CreateInstance("ADODB.Connection");
m_pConnection->Open("Data Source=xrd;UID=xrd;PWD=gbjd;","","",adModeUnknown);//连接ODBC数据源
由于直接利用ORACLE自带连接的方式有时通信返回值是假的,即使网线拔掉也返回通信成功,所以改成了从ODBC获得数据源字符串,样本工程也是这样做的,没问题,新建工程如果不执行连接,SOCKET返回值就是8开头的一个10位10进制数,为什么?
...全文
377 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2010-12-12
  • 打赏
  • 举报
回复
抱歉抱歉,我搜索了一下,果然在样本工程里找到了如下代码:
static WSADATA wd;

if (WSAStartup(0x0101, &wd))
{
AfxMessageBox("cannot initialize WinSock");
return 0;
}
现在问题已解决,你可帮了我大忙了!
於黾 2010-12-12
  • 打赏
  • 举报
回复
如果是WSAStartup() 函数的问题,那我用做参考的工程,也没调用这个函数,照样好用啊……
於黾 2010-12-12
  • 打赏
  • 举报
回复
问题不在于ADO语句。按利SOCKET和ADO有什么关系?我不定义ADO,也该能用SOCKET访问以太网啊!

现在是,我不执行前面的ADO连接,SOCKET值就不正常。

而这个值不只是过大的问题,只要SOCKET不在1000左右的范围,经测试必然连接失败。
yutaooo 2010-12-11
  • 打赏
  • 举报
回复

我怀疑你是没有调用 WSAStartup() 函数。而执行数据库连接的语句,可能就意味着 ADO 的库函数调用了 WSAStartup().
aizibion 2010-12-11
  • 打赏
  • 举报
回复
SOCKET()返回大于等于0的数都是正常范围,失败是返回-1

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧