我没怎么写过Socket通讯, 现在用的是CSocket. 我在客户端上发了一个请求之后,如何必须让客户端等待服务器的处理结果,同时也要保证在等不到的时候能够退出。即能够有个超时时间!!!
解决方案 »
- 为什么我用VC6.0默认的ANSI环境下编程还能支持中文
- 如何用win32或SDK 语言制作一个下拉 列表(类似listBOX),并制作一个按钮??谢一辈子
- 运行.erase()函数时VC程序死掉!
- 高手请进!急求禁用BT、电驴类程序(有偿)
- 关于调用TCP协议getsockopt()
- 我有一个视频捕捉的ocx控件,如在在我的dialog中激活?这个控件“Messages”清单中是空的!
- VC6下使用ACE遇到的问题
- 如何才能用VC做出一种像xp那样的漂亮的介面?
- Directshow 捕获视频保存为文件时,能否实时保存?
- 刚做了一份笔试题,心有颇有疑难(跟题目无关)。。。
- 救命啊~~~~~~~~~~~~~~~~~~~~~~~。。。。
- ComBox和数据绑定的问题
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;
}