push不然不停的打数据进去,没多久就game over
解决方案 »
- 非模态对话框如何顶层显示?
- 谁用CADODatabase 封装好的ado类的啊
- 多文档程序怎么有两个菜单啊?我自已创建了一个菜单可是GetMenu()的时候却还是获得以前的菜单?
- 求牛人出招!
- 如何解压http协议中的gzip,deflate压缩?急!谢谢先!!!
- 关于时间的处理问题
- 如何实现图形文件的动态显示?
- 昨天看dll有关文章,突然想到一个问题,入内
- 各位大侠请帮忙,关于resourse问题
- 进行了线程同步的程序在几台机子上运行有用吗
- help!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 同志们哪,哪里有Windows NetMeeting的相关资料,需要做一个与其中白板功能类似的东东
int i;
i=socket.Send( const void* lpBuf, int nBufLen, int nFlags = 0 );
CString str;
if(i=0)
{
MessageBox("发送字节为o");
}
else
{
str.Format("发送字节为%d",i);
MessageBox(str);
}
返回的i即为发送的字节数
email: [email protected]
发送数为0是因为数据太多,来不急发送出去,只要等待一下就好了。另外CSocket不是阻塞的吗?
等一会后,可以继续。
如何解决?
我调用调用 WSACancelBlocking();没用,必须等上30秒以上。CSocket默认是非阻塞方式吗?
how to :
则WaitFor..()一个事件对象,该事件对象在OnSend()消息处理函数中重置,一旦等到OnSend()发生,WaitFor()...返回,
TO oldnew:
CEvent kkkkWaitForSigleObject(kkkk,30); 对吗? 是等30MS超时?
Help me
它会堵住Socket的消息,包括OnSend(),找一个例子看看,应该有好多这样的源码,我这儿有一个,太大(有其他功能),我没时间拆开了给你
If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in a nonblocking mode. On nonblocking stream oriented sockets, the number of bytes written can be between 1 and the requested length, depending on buffer availability on both client and server machines. The select, WSAAsyncSelect or WSAEventSelect functions can be used to determine when it is possible to send more data.
.........在nonblocking模式下,缓冲区不可用,send函数会立刻返回SOCKET_ERROR,用WSAGetLastError()得到错误WSAEWOULDBLOCK.........
2、用CSocket类时,默认的方式应该是非阻塞方式。在长时间发大量数据时,经常发生阻塞现象。但我做过试验,好象用GetLastError不能捕获WSAEWOULDBLOCK错误码,这些工作CSocket类自己已经做了!但IsBlocking()函数我没有用过,你可以试试。
3、注意,重载的OnSend()是对FD_SEND的响应处理函数。触发FD_SEND消息发生在两种情况下:1)用Connect()或Accept()建立连接时;2)在调用Send()因为阻塞而失败返回并且发送缓冲区重新变成可用时。
4、如果用API,发送端应该不会出现阻塞,但接收端比较容易出现阻塞。不过在发送端发送大量数据时,应该说出现接收端阻塞的情况也很少。
5、我觉得EaStar1110所说的,用事件通知的方法实现数据的发送在发送大量数据时肯定会阻塞(与用CSocket类的原理是一样的)。当然UDP的方式传输要快于TCP。希望EaStar1110能够将自己的具体实现过程贡献出来,让我们看看。
6、用多线程实现可能要好一些。用一个线程专门侦听网络连接,一个线程专门发送数据。我现在还不清楚用CSocket的Accept(CAysncSocket& socket)时,创建的新的Socket是否就是一个线程?望高手指教!!!
平台,是一种单线程 + 异步的模式,对于我们现在来说,使用多线程+阻塞的形式最简单。
我曾经用send和recv发送和传输过图像,当传输量大于3M的时候就game over了,后来采用
分块发送才搞定,不过这样做效率有问题。
有一种i/o模式-重叠端口模式不错,可以不用socket的缓冲区,直接用用户缓冲区.
平台,是一种单线程 + 异步的模式,对于我们现在来说,使用多线程+阻塞的形式最简单。
我曾经用send和recv发送和传输过图像,当传输量大于3M的时候就game over了,后来采用
分块发送才搞定,不过这样做效率有问题。
有一种i/o模式-重叠端口模式不错,可以不用socket的缓冲区,直接用用户缓冲区.
我同意!