读书人

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

发布时间: 2012-01-23 21:57:28 作者: rapoo

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,这是网络编程的忌讳,个人感觉。

读书人网 >VC/MFC

热点推荐