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