如何判断 是否成功连接了服务器呢

bsnry 2012-07-24 11:20:37
项目中的用到了CAysncSocket这个类,进行了封装了。

代码是别人写的。

这个类是异步类,connect后,不能根据返回值来进行判断,

功能:点击连接按钮, 套接字去连接服务器,连接成功就发送一个认证包给服务器。

//已经定下来了,是客户端发送认证给服务器


由于不知道何时连接成功。 导致不知道何时发送。

所以项目中做了一个很二的做法:

void CXXDialog::OnBtnConnect()
{

mysocket.connect(..);
//创建接受数据线程
//创建其他线程


}


//多次设置断点,发现,只要连接后,这个函数被触发
void CMysocket::OnSend(int nErrcode)
{
m_pDlg->OnSend(int nErrcode);

}

void CXXDialog::OnSend(int nErrcode)
{

mysocket.send(,,); 发送一个认证包给服务器

}


1.如何判断是否成功连接
2.何时创建接受数据线程






...全文
741 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen_wei 2012-07-24
  • 打赏
  • 举报
回复
1.如何判断是否成功连接

mysocket.connect(..);

Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError

每一个创建你都是一个独立的线程!!这样创建成功的就独立接受数据了!!

bsnry 2012-07-24
  • 打赏
  • 举报
回复
连接成功后,

onconnect, onsend都会被调用。


AysncSelect成员函数设置后,
主动发送消息,那么 onsend也会触发。


接受线程,应该在

onconnnect中创建,







[Quote=引用 11 楼 的回复:]

1: your application is using the overridable callbacks, your application will receive an OnConnect message when the connect operation is complete. The following errors apply to this member function:
……
[/Quote]
lijianli9 2012-07-24
  • 打赏
  • 举报
回复
1: your application is using the overridable callbacks, your application will receive an OnConnect message when the connect operation is complete. The following errors apply to this member function:
2: onsend 表明套接字可以发送数据了。
都表明你连接成功了。

bsnry 2012-07-24
  • 打赏
  • 举报
回复
多谢你了啊



[Quote=引用 9 楼 的回复:]
几年前?

我最近发布了一个包装boost.asio的资源,还有三篇教程,从我的资源我博客中看吧。源代码中有我的QQ和邮箱。
[/Quote]
youngwolf 2012-07-24
  • 打赏
  • 举报
回复
几年前?

我最近发布了一个包装boost.asio的资源,还有三篇教程,从我的资源我博客中看吧。源代码中有我的QQ和邮箱。
bsnry 2012-07-24
  • 打赏
  • 举报
回复
你好,我记得你几年前发过boost的问题

asio

方便留Q, 有空讨论技术嘛




[Quote=引用 7 楼 的回复:]
不是有个OnConnect吗,可重写的。当它被调用的时候,就连接成功了。
[/Quote]
youngwolf 2012-07-24
  • 打赏
  • 举报
回复
不是有个OnConnect吗,可重写的。当它被调用的时候,就连接成功了。
bsnry 2012-07-24
  • 打赏
  • 举报
回复
回复于:2003-08-29 10:20:55因为你用的是非阻塞方式 socket,所以你的连接一般情况下不会立刻响应,你不该这样写代码:
给你个解决办法,在m_ClientSocket的类的OnConnect()事件中处理你连接问题:在OnConnect事件中,你可以知道连接是成功还是失败,然后在处理。


http://topic.csdn.net/t/20030829/08/2200488.html
第5楼




[Quote=引用 4 楼 的回复:]
连接,发送,都是根据返回值来判断的!!

TCP连接,UDP连接是有区别的!!
[/Quote]
bsnry 2012-07-24
  • 打赏
  • 举报
回复
我的是tcp


// TODO: Add extra initialization here
m_Conn.SetDlg(this);
if (m_Conn.Create())
{
}
else
{
MessageBox("创建Socket失败!");
}
GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE);


return TRUE; // return TRUE unless you set the focus to a control
}


默认tcp



[Quote=引用 4 楼 的回复:]
连接,发送,都是根据返回值来判断的!!

TCP连接,UDP连接是有区别的!!
[/Quote]
shen_wei 2012-07-24
  • 打赏
  • 举报
回复
连接,发送,都是根据返回值来判断的!!

TCP连接,UDP连接是有区别的!!
bsnry 2012-07-24
  • 打赏
  • 举报
回复
异步的,我觉得不能根据返回值,比如 发送消息给对方,很是麻烦。



当客户发送消息后,不能根据CClientSock::OnSend来判断是否成功



[Quote=引用 1 楼 的回复:]
1.如何判断是否成功连接

mysocket.connect(..);

Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError

每一个创建你都是一个独立的线程!!这样创建成功的就独立接受数据了!!

……
[/Quote]
bsnry 2012-07-24
  • 打赏
  • 举报
回复
我又写了一个简单的小程序,则是

贴代码:


// TODO: Add your control notification handler code here
if (0 == m_Conn.Connect("127.0.0.1",1500))
{
GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_SEND)->EnableWindow(TRUE);

GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(TRUE);
}



这种法子是错误的,无法正确获得

不过意外的是,我找了正确的方法了



void CClientSock::OnConnect(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if (0 == nErrorCode)
{
m_pDlg->OnConnected(); //可以这对话框类的这个函数创建线程
//根据nErroCode来判断是否连接成功
}
CAsyncSocket::OnConnect(nErrorCode);
int i=2;
i++;
}


void CClientSock::OnSend(int nErrorCode)
{
MessageBox(NULL,"xx","yy",MB_OK);
}

当连接后,客户端会触发OnConnect 然后进入OnSend







[Quote=引用 1 楼 的回复:]
1.如何判断是否成功连接

mysocket.connect(..);

Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError

每一个创建你都是一个独立的线程!!这样创建成功的就独立接受数据了!!

……
[/Quote]

18,356

社区成员

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

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