CSocket设置超时(转)

xiaoxiao2021-02-28  6

转自:

https://bbs.csdn.net/topics/32591

setsockopt不好用,天啊,我该怎么办? 利用MFC的Csocket类实现网络通信1 发表于: 2000-11-28 18:03:00  楼主 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 回复次数:13 推荐 MFC CSocketCSocket中 send 与onsend()区别CSocket类的使用,实现TCP/UDP在局域网内通信MFC+CSocket聊天室程序CAsyncSocket及CSocket的区别和用法CAsyncSocket与CSocket的区别(即同步与异步)MFC CSocket 和 CSocketFile的使用CSocket 和CAsyncSocket类介绍 sxbyl      用CAsyncSocket或Socket API 2.0 一个使用CSocket类的网络通信实例 回复于: 2000-11-28 18:09:00 #1 得分:0 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 我笑得好开心  谢谢,能否说清楚一点? CSocket类编程模型 回复于: 2000-11-28 18:41:00 #2 得分:0 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 白痴一个  呵呵,顺便问一下CAsyncSocket 怎么设成blocking的socket? 【转】VC++Csocket类的文件收发函数 回复于: 2000-11-28 19:55:00 #3 得分:0 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 hanphy  aTT 网络的connect如何超时设置?MFC socket异步 timeout select 回复于: 2000-11-28 20:11:00 #4 得分:0 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 剑客。孤星  CAsyncSocket里面用 SetSockOpt(SO_RCVTIMEO,&nRcvTimeOut,sizeof(nRcvTimeOut)); 可以设置接受超时 设置socket.Receive()的等待时延 回复于: 2000-11-29 11:06:00 #5 得分:10 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 剑客。孤星  用CAsyncSocket::IOCtl(long lCommand, DWORD* lpArgument)来设置非阻塞模式 lpCommand为FIONBIO  lpArgument指向一个为零的DWORD  visual c++项目 回复于: 2000-11-29 11:12:00 #6 得分:10 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 hendery  MFC的CAsyncSocket、CSocket用的是winsock 1.0的API,所以无法在Socket中设置超时。 如果你非要用CSocket,只好自己在窗口中加个定时器来判断超时了,还要设置为非阻塞模 式。如果你非要用Socket来直接判断超时,建议你该用winsock 2.0的API来写,可以设置 超时。 利用MFC的Csocket类实现网络通信 回复于: 2000-11-29 11:22:00 #7 得分:30 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 Tiro  我拷了一个类,我测试过了 ///  sock.h #include "stdafx.h" class CSock : public CSocket { virtual BOOL ConnectHelper(const SOCKADDR* lpSockAddr, int nSockAddrLen); virtual void OnClose( int nErrorCode ); public: CSock() { m_Kill = TRUE; } BOOL m_Kill; }; /  sock.cpp #include "stdafx.h" #include "Sock.h" /// CSocket modify - timeout module. BOOL CSock::ConnectHelper(const SOCKADDR* lpSockAddr, int nSockAddrLen) { if (m_pbBlocking != NULL) { WSASetLastError(WSAEINPROGRESS); return  FALSE; } m_nConnectError = -1; if (!CAsyncSocket::ConnectHelper(lpSockAddr, nSockAddrLen)) { if (GetLastError() == WSAEWOULDBLOCK) { // Insert.... CTime curt, st; CTimeSpan span(0, 0, 0, m_nTimeOut); st = CTime().GetCurrentTime(); //....... while (PumpMessages(FD_CONNECT)) { if (m_nConnectError != -1) { WSASetLastError(m_nConnectError); return (m_nConnectError == 0); } // Insert.... curt = CTime().GetCurrentTime(); if(curt > (st+span)) return FALSE; //.............. } } return FALSE; } m_Kill = FALSE; return TRUE; } void CSock::OnClose(int nErrorCode) { m_Kill = TRUE; } CSocket详解 回复于: 2000-11-29 12:02:00 #8 得分:10 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 alanlee  CSocket 没什么好办法设超时 你可以用 socket 的 SDK API  那里就很好用啦 超时完全自己控制,当然你要加自己的线程控制 但开销比CSocket还是小很多的 CAsyncSocket与CSocket的区别-同步和异步socket 回复于: 2000-11-29 14:10:00 #9 得分:20 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 HaoGeGe  CSocket本身不能完成你的功能. Tiro说的是那个类我也用过,你可以参考之. 套接字和CSocket类 回复于: 2000-11-29 15:47:00 #10 得分:0 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 bingliu  在CSocket中重载receive和send函数,然后直接操作m_hSocket变量。用FD_SET和select函数,具体的可以看MSDN。 对CSocket类使用的理解 回复于: 2000-12-02 21:40:00 #11 得分:40 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 meifen  s CSocket设置超时 回复于: 2001-07-13 13:00:52 #12 得分:0 对我有用[0] |  丢个板砖[0] |  引用 |  举报 |  管理 april_jia  关于Tiro的程序的做法我有些建议。我看了一下MFC的源程序CSocket的m_nTimeOut变量是用在PumpMessage()函数中的,它的用途不是我们在这里讨论的这种,所以你的程序确实可以执行,很管用,但是我建议在CSock中再定义一个变量来代替这个变量。再有,我不知道ConnectHelper这个函数有什么用,在哪里被调用的。谢谢。
转载请注明原文地址: https://www.6miu.com/read-2150080.html

最新回复(0)