CSocket 同样的代码,在不同的程序中,结果居然不一样

hcl545 2012-11-14 11:03:04
各位大侠:
下面这段代码,我在一个工程里运行一切正常,在Accept后也会正常阻塞,但在我自己新建的工程中运行,编译一切正常,但运行到Accept后为什么就不能正常阻塞了呢,为何??非常感激!!
代码如下:
CSocket sockTemp;
sockTemp.Create(8888); //端口为7803,任意的
sockTemp.Listen(1 );//只接受一个连接
CSocket sockSend;
sockTemp.Accept(sockSend);//注意,sockTemp已交了自己的指针地址到sockSend,故不用Close
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcl545 2012-11-30
  • 打赏
  • 举报
回复
引用 6 楼 xumaojun 的回复:
AfxSocketInit对应的释放资源函数在结束时需要成对调用
谢谢,非常感谢!这些天搞网络编程折腾死了,时间紧、任务重,还是个新手啊!真难!!
hcl545 2012-11-15
  • 打赏
  • 举报
回复
引用 1 楼 xumaojun 的回复:
看看是否端口占用,accept返回是否有错误码?楼主怎么不检查函数返回值呢? create,listen,accept一定执行成功吗?
谢谢,你的提点很有用啊!给分!
hcl545 2012-11-15
  • 打赏
  • 举报
回复
引用 1 楼 xumaojun 的回复:
看看是否端口占用,accept返回是否有错误码?楼主怎么不检查函数返回值呢? create,listen,accept一定执行成功吗?
找到方法了,在程序前面添加AfxSocketInit(),即可。在一篇文章中找到如下说明: AfxSocketInit() 这个函数,在使用CSocket前一定要先调用该函数,否则使用CSocket会出错;并且该函数还有一个重要的使用方式,就是在某个线程下使用 CSocket 前一定要调用,就算主线程调用了该函数,在子线程下使用 CSocket 也要先调用该函数,要不会出错。
hcl545 2012-11-15
  • 打赏
  • 举报
回复
引用 1 楼 xumaojun 的回复:
看看是否端口占用,accept返回是否有错误码?楼主怎么不检查函数返回值呢? create,listen,accept一定执行成功吗?
谢谢楼上,我用GetLastError与WSAGetLastError获得的返回值都为10093,查看了一下含义,为:应用程序没有调用 WSAStartup,或者 WSAStartup 失败。 这算什么啊!我肯定调用了啊!问题有点莫名其妙!
xumaojun 2012-11-15
  • 打赏
  • 举报
回复
看看是否端口占用,accept返回是否有错误码?楼主怎么不检查函数返回值呢? create,listen,accept一定执行成功吗?
xumaojun 2012-11-15
  • 打赏
  • 举报
回复
AfxSocketInit对应的释放资源函数在结束时需要成对调用
xumaojun 2012-11-15
  • 打赏
  • 举报
回复
原来是初始化有问题啊

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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