lzmtw 大哥。。。 <br/>请教一个问题!! <br/>Dim socke As Socket <br/>Dim udppoint As New IPEndPoint(IPAddress.Parse(TextBox1.Text), 6112) <br/>Dim data() As Byte = {69, 0, 0, 44, 20, 225, 0, 0, 128, 17, 112, 117, 10, 129, 80, 84, 10, 129, 80, 95, 23, 224, 23, 224, 0, 24, 123, 179, 247, 47, 16, 0, 80, 88, 51, 87, 20, 0, 0, 0, 0, 0, 0, 0} <br/>socke = New Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP) <br/>socke.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1) <br/>socke.SendTo(data, udpoint) <br/><br/>执行调试时,到了 socke.SendTo(data, udpoint) 就报错 “一个封锁操作被对 WSACancelblockingCall 的调用中断." <br/><br/>可以帮帮我看看问题出在哪里吗!!!!谢谢!!!
-
水如烟
回复于
2008-04-28
-
对socket我没直接用过,这方面的我只是初步接触了下remoting<br/><br/>有些东西是不能调试的,时间稍长就自我销毁.<br/><br/>你参考一下这篇:http://coffecoco.bokee.com/806282.html<br/><br/>监听线程的处理<br/><br/> 监听线程会在下列语句处阻塞,直到有连接请求进入。<br/><br/>'接收连接请求<br/>m_sckAccept = m_sckListen.AcceptTcpClient<br/><br/> 在阻塞的状况下,简单的使用Abort,仅仅是将线程设置为AbortRequest状态,而没有真正的解除线程的阻塞,甚至使用Application.Exit(),也无法真正的终止线程并释放线程所占有的资源。这样在下次在同一个端口调用监听时就会有错误发生。并且在应用程序退出后,监听线程依然像孤魂野鬼一般在内存中阻塞着。<br/><br/> 如果在此时直接调用m_sckListen.Stop来终止监听,则会发生以下描述信息的错误:<br/><br/> 一个封锁操作被对 WSACancelBlockingCall 的调用中断。<br/><br/> 但是这样似乎并不会影响以后对此端口监听的调用,并且能够结束线程。<br/><br/> 彻底解决问题的一种方法是用一个终止标志作为监听循环的条件,需要终止监听时,先设置终止标志为退出监听循环,然后向自己的监听器发送一个连接请求解除监听线程的阻塞,然后就可以安全的退出监听循环,关闭监听,并结束监听线程。这样在程序结束以后也不会有线程滞留的现象。<br/><br/>多个连接请求<br/><br/> 对于多个连接请求,TcpListener将他们放入一个队列,直到到达可接收的连接的最大数,通过Accept的调用用队列中删除已经接收的连接请求。另外由于采用了在传输时动态建立连接的结构,不需要长期维护多个连接有效,使等待处理的队列非常短,所以对于不是特别频繁的多个连接请求,本例子都可以轻松的处理。但是并没有进行非常严格的极限测试,所以不保证对于大量的、并发性较强的多个连接能够有效处理。<br/>