使用csocket,send时出现10057号错误WSAENOTCONN

zsindy 2005-07-29 11:05:17
请教各位,这个错误是不是代表连接已经断开,如果我想重连,应该怎么处理。
我试过用close和delete清理掉原来的连接,都不行,会出错
也试过不清理,直接connect,同样报错

好心的帮帮忙,这个问题困扰我好多天了,谢谢了
...全文
701 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsindy 2005-07-29
  • 打赏
  • 举报
回复
还有,我自己尝试重连的代码
//判断调用来源
//如果为真,表示从sendworker来,不用删除
//如果为假,表示从onsocketclose来,需要删除
if (!m_sock->bConnected){
try{
m_sock->Close();
delete m_sock;
m_sock = NULL;
}catch(CException e){
WriteLogA("delete m_sock error on MtDisconnect!");
}

//重新连接
m_sock = new SGIPSocket(this);
}

//异常中断连接,等待10秒钟,重新连接
Sleep(10000);

m_sock->Create(0, SOCK_STREAM, NULL);
int result = m_sock->Bind(m_ServerIp.GetBuffer(m_ServerIp.GetLength())
, m_ServerPort, m_UserName.GetBuffer(m_UserName.GetLength())
, m_PassWord.GetBuffer(m_PassWord.GetLength()));

就在这里出的错
zsindy 2005-07-29
  • 打赏
  • 举报
回复
这是创建和连接的代码

m_sock = new SSocket(this);
m_sock->Create(0, SOCK_STREAM, NULL);
int result = m_sock->Bind(m_ServerIp.GetBuffer(m_ServerIp.GetLength())
, m_ServerPort, m_UserName.GetBuffer(m_UserName.GetLength())
, m_PassWord.GetBuffer(m_PassWord.GetLength()));

SSocket是我自己写的类,继承CSocket
Bind里面
if(!Connect(SMG_ip, port))
return ERROR_CONNECT;

Submit里面
if (Send(SGIPData, psubmitstruct->totallength)==SOCKET_ERROR)
{
delete SGIPData;
//return ERROR_WRITE;
return GetLastError();
}
else
{
m_dlg->WriteLogD(SGIPData);
delete SGIPData;
return ERROR_OK;
}


我说的过一段时间,就会在send时出现10057号错误
关于delete,close时出现的错误,我也不知道是什么错误,就出现了关闭,重试,xxx三个按钮(第三个忘了)的那个窗口。
qrlvls 2005-07-29
  • 打赏
  • 举报
回复
使用 EnumWindow 枚举,通过 GetWindowText 获取窗口标题
也可以使用 FindWindowEx 然后通过句柄递归查询子窗口
pp_hotel 2005-07-29
  • 打赏
  • 举报
回复
都报什么错啊 源代码给大家看看啊
zsindy 2005-07-29
  • 打赏
  • 举报
回复
忘了说了,其实我的连接已经建立,并且收发了很多的数据,中间遇到的这个问题
代码是,这是在一个线程里面的,是负责发送数据的
int sret = ERROR_WRITE;
while (sret != ERROR_OK)
{
sret = pUnicomdlg->m_sock->Submit(pstruct);
if (sret != ERROR_OK){
pUnicomdlg->WriteLogA("发送一条消息失败!");
CString errs;
errs.Format("连接错误的编号:%d", sret);
pUnicomdlg->WriteLogA(errs);

Sleep(1000);
pUnicomdlg->MtDisconnect();
/*
errs.Format("submit_error:%s,%s", pstruct->sub.msgcontent, pstruct->sub.usernumber);
AfxMessageBox(errs);
*/
}
}


{
pUnicomdlg->nSendNum += 1;
pUnicomdlg->WriteLogA("成功发送一条消息!");
}
}
快乐鹦鹉 2005-07-29
  • 打赏
  • 举报
回复
WSAENOTCONN The socket is not connected.
表示socket没有连接。
你的connect根本没有建立连接。
将代码贴出来看看吧
zsindy 2005-07-29
  • 打赏
  • 举报
回复
其实我的重连,实际上是重新创建socket,重新连接,不是用原来的socket连接,所以SO_REUSEADDR属性就无所谓了吧

只是猜测
nuaawenlin 2005-07-29
  • 打赏
  • 举报
回复
重联的socket,最好设置SO_REUSEADDR属性

18,356

社区成员

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

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