📄 subject_62716.htm
字号:
<hr size=1>
<blockquote><p>
回复者:柯阳 回复日期:2003-11-28 13:03:02
<br>内容:谢谢zzjhsj兄弟。我另开一个线程在侦听连接的客户。<BR>DWORD WINAPI ListenThread(LPVOID lpParameter) //侦听线程并初始化接收<BR>{<BR> SOCKADDR_IN saRemote;<BR> int nRemoteLen;<BR> SOCKET Accept;<BR><BR> LPPER_HANDLE_DATA PerHandleData;<BR> DWORD Flags;<BR> DWORD RecvBytes;<BR><BR> CIocpFrame* iocp_frame = (CIocpFrame*)lpParameter;<BR><BR> // Accept connections and assign to the completion port.<BR> while(g_bStartListen)<BR> {<BR> nRemoteLen = sizeof(saRemote);<BR> if ((Accept = WSAAccept(g_sdListen, (SOCKADDR *)&saRemote,&nRemoteLen, NULL, 0)) == SOCKET_ERROR)<BR> {<BR> if (WSAGetLastError() != ERROR_IO_PENDING)<BR> return 0;<BR> }<BR> <BR> PerHandleData=iocp_frame->AssociateDeviceWithCompletionPort((HANDLE)Accept);<BR> if(PerHandleData==NULL)<BR> continue;<BR><BR> memcpy(&PerHandleData->ClientAddr,&saRemote,nRemoteLen);<BR> //接收客户端发送的请求<BR> Flags=0;<BR> if (WSARecv(Accept, &(PerHandleData->pIOContext->DataBuf), 1, &RecvBytes, &Flags,<BR> &(PerHandleData->pIOContext->Overlapped), NULL) == SOCKET_ERROR)<BR> {<BR> if (WSAGetLastError() != ERROR_IO_PENDING)<BR> {<BR> return FALSE;<BR> }<BR> }<BR> <BR> }<BR> return 0;<BR>}<BR><BR>因为是实时发送数据,每天有大量的数据在传输,你说的具体问题在哪里?<BR>“系统维护每个线程的i/o申请,如果这些申请没有执行前线程停止了,那么这些i/o申请会被系统cancel掉,所以建议把你的所有的I/O申请放到放到一个专门的i/o thread去完成;”哪些的io操作?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zzjhsj 回复日期:2003-11-28 13:25:59
<br>内容:A 线程在调用 Write(SOCKET) 返回PENDING,然后线程Exit,那么最后的这次调用可能不会传递到对方;<BR><BR>你的 ListenThread 不能说明什么,也不能解决你说的丢包的问题——大家差不多都是这么用。<BR><BR>我还是推荐你代码一下我的思路,30分钟搞定没问题。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:柯阳 回复日期:2003-11-28 14:50:37
<br>内容:谢谢zzjhsj兄的热心帮助,我一直在揣摩你的提示,但还是不大明白。能否给个详细的提示或者代码示例。让我等下好好做个试验,谢谢。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:柯阳 回复日期:2003-11-28 14:52:04
<br>内容:顺便问一下,老兄在互联网应用上,每个包长也是4096吗
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zzjhsj 回复日期:2003-11-28 14:59:02
<br>内容:TCP 作为一种数据流协议,好像没有包的概念吧?你怎么老讲包呢?讲得我晕晕的<BR>你要例子?我可以帮你找,但是不一定还在:)<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:柯阳 回复日期:2003-11-28 15:09:25
<br>内容:呵呵, 哦,以前我都用UDP发广播包,老毛病。看来我基础不够扎实,呵呵。我的邮箱 kjq@zy99.cn ,找到发一份给我,或者贴出来,谢谢。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zzjhsj 回复日期:2003-11-28 15:21:04
<br>内容:1<BR>2003-11-28 18:27:02
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -