小弟初学网络编程,现有一段代码:
void CMainDlg::OnButton1() //表示对话框上一按钮按下
{
if(m_socketClient){//在这里,怎样判断已经连上了?
MessageBox("connect aready");
return;
} if(m_socketClient.Connect("10.184.1.114",1052))
MessageBox("connect success");
else
MessageBox("connect failed");
}程序运行,第一次按下按钮,程序提示连接成功,而第二次,则是连接失败。我想在连接成功后,第二次按按钮时提示已经连接。

解决方案 »

  1.   

    判断是否有一个连接在执行.
    Call this member function to determine if a blocking call is in progress.BOOL IsBlocking( );
    Return Value
    Nonzero if the socket is blocking; otherwise 0.
      

  2.   

    使用m_hSocket属性来判断是否SOCKET可用.
    Contains the SOCKET handle for the socket encapsulated by this CAsyncSocket object.SOCKET m_hSocket;
      

  3.   

    wuxuan(真心英雄) 兄:
    我加上
    if(m_socketClient.IsBlocking()){
    MessageBox("aready connected");
    return;
    }
    后,发现不管怎样,IsBlocking总是为FALSE;是否还有其它设置?
      

  4.   

    wuxuan(真心英雄) 兄,怎样用m_hSocket属性判断。
      

  5.   

    CString ip;
    UINT  port;
    m_socketClient.GetSockName(ip,port)
    if(ip == "0.0.0.0")
      还没有连接,
    else 
      连接
      

  6.   

    多谢cococut兄:但还有一问题,
      CString ip;
    UINT  port;
    m_socketClient.GetSockName(ip,port)
    这个port的值总是为1657,不知何故,而我在服务器端设的端口不是1657。分不够我可再开帖子。
      

  7.   

    如果你用CSocket类的话,
    在CSocket.create()的时候,输入你要绑定端口,
    比如100000,则GetSockName(ip,port)
    后port为100000.
    如果没有输入,则为随机绑定的断口。端口在这里
    你不用管!
      

  8.   

    cococut兄,我是想得到服务器的端口,在服务器端程序中,我是这样创建的:
    m_socketServer.Create(1052);
    我在客户端连接成功后,我想得到服务器端的接口,就是得到那个1052?
      

  9.   

    GetSockName()该函数时得到本地socket的端口,不是服务器,
    tcp协议,想得到服务器的端口,是已知的,就是你调用connect()
    函数的时候其中的参数,所以对你来说服务器端的端口你是已知,
    如果是udp的话,不用connect(),直接调用SendTo()发送数据,
    对方可以根据接收到的数据包可以得到发送方的ip和端口,而tcp的服务器端口是已知的!