怎样判断Connect已成功,即已成功连接到服务器?

99263 2002-10-29 11:43:11
我继承了一个类
class CStationSocket : public CAsyncSocket

首先Creat();
int rc=0;
再rc=Connect("127.0.0.1",5477);

在5477这个端口有服务器侦听和没有侦听时,Connect返回值都为0?

为什么呢,我要如何判断一个Socket成功与服务器建立了连接呢?
...全文
1135 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
99263 2003-02-14
  • 打赏
  • 举报
回复
是客户端这边,现在还是没有解决喔!各位继续帮忙啊!
everandforever 2003-02-14
  • 打赏
  • 举报
回复
回复人: zxiaox(呆呆2002) ( ) 信誉:100 2002-10-30 14:18:57 得分:0



CAsyncSocket是异步通讯的,当你发出连接请求,连接成功的话,就会产生FD_Connect消息,添加消息处理函数OnConnect()就可以了.



yanhuahui 2002-11-01
  • 打赏
  • 举报
回复
服务器的监听和accpet代码帖出来,你主题内容的代码是客户机?
99263 2002-10-31
  • 打赏
  • 举报
回复
To:yanhuahui(小辉)
没有绑定固定Port,Create();
用户 昵称 2002-10-31
  • 打赏
  • 举报
回复
他不是BOOL型的吗?
yanhuahui 2002-10-31
  • 打赏
  • 举报
回复
客户端是不是绑定固定的端口,如果是这样请看:
http://expert.csdn.net/Expert/topic/1131/1131123.xml?temp=.6317255
139129 2002-10-31
  • 打赏
  • 举报
回复
把代码拿上来看看
99263 2002-10-31
  • 打赏
  • 举报
回复
现在的问题是这样,我这儿的客户端Socket每10秒连接上次服务器,如果连接上,服务器会发送数据过来,则不连接了,否则就会一直连接下去,

当客户端Socket第一次连接服务器时,能收到服务器发来的数据,即能激活OnReceive事件,可当Socket第一次连接不上之后,如果第二次连接服务器,则收不到服务器发送的数据,Why? 其实从服务器上看来客户端已建立了连接,并且发送的数据,可是客户端为什么收不到呢?
jiang0730 2002-10-30
  • 打赏
  • 举报
回复
DWORD dwResult = GetLastError();
switch(dwResult)
{
case WSAETIMEDOUT:
strcpy(szError,"连接超时!");
case WSAECONNREFUSED:
strcpy(szError,"连接被拒绝!");

case WSAEHOSTUNREACH:
strcpy(szError,"主机无法到达!");

case WSAEISCONN:
strcpy(szError,"已经和主机建立了连接!");
default:
strcpy(szError,"连接时发生其它错误!");
}
freeclick 2002-10-30
  • 打赏
  • 举报
回复
没错,返回1代表成功。
返回0表示失败。
取得失败信息用WSAGetLastError()。
yanhuahui 2002-10-30
  • 打赏
  • 举报
回复
CAsyncSocket是异步,用基于CSocket,返回1就代表成功。
wavestudio 2002-10-30
  • 打赏
  • 举报
回复
对于WSAAsyncSelect模型和WSAEventSelect模型,可以在客户端等待FD_Connect消息/事件的出现。
Gladstone 2002-10-30
  • 打赏
  • 举报
回复
"127.0.0.1" 是本地机地址。connect 返回0表示已经连接成功了。
想要验证可以发数据过去,对方收到与否则可证明连接是否真的成功。

想要得到错误信息可以这样:
if (nRet == SOCKET_ERROR)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
WSAGetLastError(),
0, // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);

MessageBox((LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
LocalFree( lpMsgBuf );
return 0 ;
}
139129 2002-10-30
  • 打赏
  • 举报
回复
用返回值。
if(ret == SOCKET_ERROR)
print("Connect Error with Error Code %d\n", WSAGetLastError);
else printf("Connect Successed!");

用“Error Lookup"查错误代码。
yanhuahui 2002-10-30
  • 打赏
  • 举报
回复
因为你用的是基于CAsyncSocket,应该用CSocket,否则他先返回一个直,不管你连上没有?用同步的CSocket,则等待到链接成功与否才返回相应的值!
zxiaox 2002-10-30
  • 打赏
  • 举报
回复
CAsyncSocket是异步通讯的,当你发出连接请求,连接成功的话,就会产生FD_Connect消息,添加消息处理函数OnConnect()就可以了.
139129 2002-10-30
  • 打赏
  • 举报
回复
MSDN:
If no error occurs, connect returns zero. Otherwise, it returns SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError.

如果没有错误发生,connect返回0.否则返回SOCKET_ERROR.
99263 2002-10-30
  • 打赏
  • 举报
回复
非常感谢各位的回答,可是我连另外一个IP时,如“192.168.0.11”,连接成功和不成功都返回0?为什么呢,如果对方不给我返回数据,我如何知道已连接上了呢?

18,356

社区成员

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

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