b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

windows linux socket_alarm onreceive_socket onreceive(2)

电脑杂谈  发布时间:2017-01-30 18:03:24  来源:网络整理

因此:OnReceive不响应属于正常现象,因为同步模式从来不是靠这个来做的。当你同步模式时,线程是不是hang再那,他怎么用消息去处理?

To2楼18楼:OnReceive要窗口没错,但是socket系统会自己创建wnd,不需要你手工指定。当系统发现当前线程没有CSocketWnd实例时,会自己创建,这不是问题to楼主:这个问题很复杂,不是你换了类就行的。socket onreceive这不仅仅要你精通socket那一套,还要你熟悉多线程和消息,因此你要学习windows编程、多线程编程然后才是socket编程我学windows花了1-2年,socket学了半年,多线程又时半年。你觉得我三言两语能解决你问题么?

基本原则:

1.对于所有socket:堵塞都时正常现象,遇到堵塞,你应该等待到不堵塞再发。CSocket应该不会返回堵塞错误,他会一直停留在那。CAyncSocket会立刻返回失败,WSAGetLastError此时会返回10035(这才是堵塞错误,其他错误都不是堵塞),对于CAsyncSocket你需要等待下一次OnSend触发再尝试发2.发送和接收应该是交错的,你必须知道对方会发送多少字节以后你才会发送数据,如果彼此长度不确定,似乎会又麻烦

原因是:a)CSocket不能跨线程使用b)同一个线程中当你发送时不能接收,反之亦然因此,如下情况可能用CSocket会有麻烦

a)A发送到B一次数据后,你不知道B会返回多少数据

b)A再接收B过程中,B会不定期的返回数据

CAsyncSocket不需要多线程,你只要把所有的socket放一个线程即可,最好封装在主线程之外的一个单独线程,socket不得被线程之外的任何东西访问(原因一样,隐含的CSocketWnd不能跨线程被访问)CSocket必须多线程,因为他时阻塞的

CSocket应该不会返回堵塞错误,他会一直停留在那。?

我一开始就是在一个线程的死循环里不断用Receive()接收,看看是否有数据发送过来!不过这样的话我发送数据就发送不出去!我用GetLastError()一看返回一个错误,错误是:正在阻塞!

学习windows编程、多线程编程然后才是socket编程我学windows花了1-2年,socket学了半年,多线程又时半年。你觉得我三言两语能解决你问题么?

那你肯定是高手了!向您致敬了!

我崇拜这样的人!

自己是高手,又能放下架子帮别人!

真的感谢您!

GetLastError返回正在阻塞?他应该返回一个整数啊?你这个正在阻塞是谁翻译出来得?CSocket是阻塞型套接字,如果正在阻塞,他就应该永远停在哪,不清楚在何种情况下才会出现你所谓得error

无语,看来回答问题必须说清楚,否则会引起误会。楼主干脆把代码贴完整一点,大家直接帮你改算了。另外看你的Client1ThreadFunc线程,假如只有这些,这个线程应该连接后就退出了,肯定没有receive的。

是啊!我GetLastError后得到的是一个数据,我用MSDN看到的此错误就是正在阻塞!

我是在这种情况下得到的正在阻塞:在Client1ThreadFunc(CServerView*pView)函数中,

While(1)

intm;

intl=pView->m_sock.Receive(&m,4);

if(4==l)

{

//

//

}}

然后我在主线程的一个函数中用m_sock.Send(&t,4)发送数据,没有成功,我直接在Send函数后面用m_sock.GetLastError()获得错误值就是得到了一个数,在MSDN上看到是正在阻塞。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29610-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...