首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CSocket与线程 哪位高手帮解决了.100分相送

2012-01-23 
CSocket与线程 谁帮解决了.100分相送是这样的,我用CSocket创建了2个sock指针.oldsock,newsock并在主线程中

CSocket与线程 谁帮解决了.100分相送
是这样的,我用CSocket创建了2个sock指针.   oldsock,   newsock
并在主线程中创建了个副线程,   在副线程中操作如下代码
===========================
new了两个CSocket类型堆空间,用oldsock和newsock分别指向.  
并且oldsock-> create,   oldsock-> listen,   oldsock-> accept(newsock)    

while(1)
{
          newsock-> Receive(str,   30);
}
===============================
而在程序窗口中创建一个按钮,   当点击就执行主线程中的
void   Button()
{
          newsock-> send( "test ",   10);
}

这写的是一个基于C/S模式的程序,   上面的是server,   client结构也和上面一样.
但我测试.连接可以成功.   但点按钮总是发送不了消息.     但当newsock-> send放到副线程中的话.   就可以正常发送.   对方也能收到.

我测试了几天找不到BUG.   估计是不是副线程Receive因为是阻塞,一直在使用newsock对象,   所以主线程不能同时操作newsock?

如果是的,应该怎么解决,   如果不是,   又是怎么样呢?   谢谢了.真是忙几天了
(搞定一定加分)



[解决办法]
你的问题在这里我觉得不容易解决,程序应该也是没有问题的,到最后肯定还是你自己解决

我以前也碰到过,后来单步调试才发现错误,单纯分析程序不容易找到问题的所在,我的错误是一个函数的参数设置错了
[解决办法]
對於每個process或thread,WinSock只允許”一”個阻攔式函式的執行。如果已有阻攔式函式正在執行,而又呼叫到WinSock函式,函式會傳回WSAEINPROGRESS的錯誤

对于你的情况只能修改代码了

让每个线程拥有一个socket连接
[解决办法]
不要用send,用WSASEND,不要在主线程中send,这是网络编程的忌讳,个人感觉。

热点排行