CAsyncSocket 中怎样设置端口,如果在本地机测试,c/s都是4000就能连接。如果不同就连接不上?为什么??
if (m_iType == 0) 
{
m_sConnectSocket.Create(103,SOCK_STREAM,FD_CONNECT);
m_sConnectSocket.Connect(m_strName,104);
}
else
{
m_sListenSocket.Create(104);
m_sListenSocket.Listen();
}
}
对吗??

解决方案 »

  1.   

    客户端其实是有底层tcp/ip自动分配的,不需要用户去设置。。如果你服务器是4000监听,你客户端connect带进的哪个4000端口,实际上是要求连接的服务器监听端口,而不是真正的客户端端口
      

  2.   

    我的程序想和别的程序连接,Server 端口为104  IP xxxx.xxxx.xxxx.xxxx
    Server端口如果和Server相同的话,它会自己连接自己.
    所以端口号要不同呀! client 端口为 103 ,怎么写这个连接呢?客户端其实是有底层tcp/ip自动分配的,不需要用户去设置。。
    对,这个msdn上是这样说的.Create()就可以了,我想制定client的端口为103怎么做呢??
      

  3.   

    你可以在服务器端的初始化函数里加上判断,例如:
    m_listensocket.Create(14875);//m_listensocket的基类是CAsyncSocket,14875为准备与客户端连接的端口
    if (m_listensocket.GetLastError())
    {
           AfxMessageBox("服务器已启动!");
           m_listensocket.Close();
       return 0;
       }
      

  4.   

    m_sConnectSocket.Create(103,SOCK_STREAM,FD_CONNECT);
    判断一下是否成功创建。
    如果没有,通过GetLastError获得错误代码看看是什么问题。
      

  5.   

    //Client
    m_socketCom.Create(3000, FD_CLOSE|FD_READ);
    m_socketCom.Connect(4000);
    //send or receive
    ....
    m_socketCom.Close();
    //Server
    CAsyncSocket m_socketCom;
    m_socketListen.Create(4000, SOCK_STREAM, FD_CLOSE|FD_LISTEN)
    m_socketListen.Listen();::OnAccept()
    {
       Accept(m_socketCom)
    }一般情况下,listensocket专门负责listen,通讯socket专门负责通讯