TCP的重新连接问题,原来建立的SOCKET不能用了?

myyxr 2003-12-15 10:39:31
情况是这样的:

我的程序做为客户端,要用TCP连接对方的主机(公网上)。
我从CAsyncSocket派生自己的类,(WIN2000环境下,VC++)
先Create(),
然后Connect( m_sTarget_HostIPaddr, m_nTarget_Port )对方
因为在公网上,所以协议约定,过60左右,我要向对方发一个包,以保持TCP连接。
如果我收到对方的回应则表明连接状态OK。
以上的步骤,都是正常的

问题是:
当出现TCP连接中断后,我再用Connect( m_sTarget_HostIPaddr, m_nTarget_Port )
连接对方的时候,总是连接不上了 :(
而当我用同样的类,再new一个对象,去连接的时候,就可以连接上 !!

搞不清楚是为什么了,哪位大侠给我指点指点?? 我给您鞠躬了,100分双手送上,呵呵
...全文
189 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkhuang 2003-12-15
  • 打赏
  • 举报
回复
你用的同样的ip和port要重新连接是需要等tcp time—wait这段时间的!
不过有个帖子你看看可以解决:
http://expert.csdn.net/Expert/topic/2564/2564710.xml?temp=.6653101
sevencat 2003-12-15
  • 打赏
  • 举报
回复
不清楚,我CSOCKET用得少,
一般我都是再socket,connect然后再搞。
myyxr 2003-12-15
  • 打赏
  • 举报
回复
七猫,说的也许对,哪是不是我要再CREATE()呢,但是我调用再CREATE()的时候出错啊。

cleanup()?? 不是CAsyncSocket类里的吧,msdn上没找到呢

CLOSE再CONNECT??? 没用,我试过

hellion 2003-12-15
  • 打赏
  • 举报
回复
先调用Close,再Connect
zhang920171 2003-12-15
  • 打赏
  • 举报
回复
连接前先Cleanup()
sevencat 2003-12-15
  • 打赏
  • 举报
回复
中断之后,这个套接字描述字就没用了。
所以...
DuMiYue 2003-12-15
  • 打赏
  • 举报
回复
对~重新create:
while循环中调用Start
long CSocketCtrlCtrl::Start()
{
// TODO: Add your dispatch handler code here
//DebugTrace(_T("CSocketCtrlCtrl::Start"));
m_lngErrorCode = 0;
long lngErrorCode = 0;
if(m_xMyAsyncSocket.m_hSocket == INVALID_SOCKET)
{
if(!m_xMyAsyncSocket.Create(0, SOCK_STREAM, FD_CONNECT))
{
lngErrorCode = m_xMyAsyncSocket.GetLastError();
//MessageBox(_T("Create Socket Failed!"), _T("Create Error"), MB_OK | MB_ICONERROR);
m_xMyAsyncSocket.Close();
FireOnError(lngErrorCode/*ERR_CONSERVER*/);
return lngErrorCode;
}
}

if(m_xMyAsyncSocket.m_bConnected)
{
// MessageBox(_T("Can not Star: Socket had been connected already!!"),
// _T("Star Error"), MB_OK | MB_ICONERROR);
return -1;
}

if(!m_xMyAsyncSocket.Connect(m_strServerAdr, m_lPort))
{
if(WSAEWOULDBLOCK != (lngErrorCode = m_xMyAsyncSocket.GetLastError()))
{
//MessageBox(_T("Connect Server Failed!"), _T("Connect Error"), MB_OK | MB_ICONERROR);
m_xMyAsyncSocket.Close();
FireOnError(lngErrorCode/*ERR_CONSERVER*/);
return lngErrorCode;
}
}
//DebugTrace(_T("CSocketCtrlCtrl::Start_End"));
return lngErrorCode;
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧