24小时热门版块排行榜    

CyRhmU.jpeg
查看: 181  |  回复: 1
当前主题已经存档。

王建发

铜虫 (小有名气)

[交流] 【求助】程序调试

这个程序调试通过了啊连接出错了啊
哪位好心人给我看看啊
/*
*        文件:        udpchat.cpp
*        描述:        UDP聊天示例程序,制台应用程序
*        时间:        2006.3.1
*/
#include
#include
#pragma comment(lib ,"ws2_32.lib"
using namespace std;
const short PORT = 5000;      //默认端口号
//输入格式为 目标IP [本地端口号] [目标端口号]
void Usage( void )
{
        cout << "使用说明\n" ;
        cout << "*******************************************************\n";
        cout << "程序名    对方主机IP地址   [本地绑定端口]   [对方主机端口]!\n";
        cout << "UDPChat     127.0.0.1            [5000]        [4000]\n";
        cout << "UDPChat     127.0.0.1            [5000]\n";
        cout << "UDPChat     127.0.0.1 \n";
        cout << "*******************************************************\n";
       
}
void Help( void )
{
    cout << "******************************\n";
        cout << "------用法        ------------\n";
        cout << "------Q或q代表退出------------\n";
        cout << "------A或a代表广播------------\n";
        cout << "------H或h代表帮助------------\n";
        cout << "******************************\n";
       
}
/*
*        文件:        chat.h
*        描述:        chat class
*        时间:        2006.3.1
*/
const int MAXBUFFER = 4096;   //设置最大缓存区
class CChat
{
public:
        CChat( void );
        ~CChat( void );
private:
        SOCKADDR_IN m_sockAddr;  // 绑定地址
        SOCKADDR_IN m_sockClent; // 发送数据方地址
        SOCKET m_sockListen;     // 等待接受数据的Socket
        int m_nErrMsg;           // Socket错误码
public:
        // 发送消息
        bool SendMsg( char *sz_Msg, int nLen, char* szHost, short lPort );
        // 等待接收数据
        bool Listen( short nPort );
        static void* ListenThread( void *data );
       
        // 初始化Socket
        bool Init( void );
        //发送UDP数据包
        bool SendMsg( char* szMsg, int nLen, unsigned int nHost, short lPort );
        // 设置广播
        bool EnableBroadcast( BOOL bEnable );
        // 错误码
        int GetErrMsg( void );
};
//***********************************************************************************
//chat.cpp
//类实现文件
// 初始化Socket
bool CChat::Init( void )
{
        //请求socket 2.1
        WORD wVersionRequested = MAKEWORD( 1, 2 );
        WSADATA wsaData;
        WSAStartup( wVersionRequested, &wsaData );
        return TRUE;
}
// 发送消息
bool CChat::SendMsg( char* szMsg, int nLen, char* szHost, short lPort )
{
        int nSend;
        hostent *pHostdata;
        if ( atoi( szHost ))
        {
                u_long ip = inet_addr( szHost );
                pHostdata = gethostbyaddr(( char* )&ip, sizeof( ip ), AF_INET );
        }
        else
        {
                pHostdata = gethostbyname( szHost );
        }
        if( !pHostdata )
        {
                cout << "获得计算机名错误\n";
                return FALSE;
        }
        SOCKADDR_IN dest; //发送目标地址
        dest.sin_family =AF_INET;
        dest.sin_addr = *( in_addr* )( pHostdata->h_addr_list[ 0 ] );
        dest.sin_port = htons( lPort );
            nSend = sendto( m_sockListen, szMsg, nLen, 0, ( SOCKADDR* )&dest, sizeof( SOCKADDR ));
        return TRUE;
}
// 等待接收数据
bool CChat::Listen( short nPort )
{
        //创建Socket(UDP)
        m_sockListen = socket( AF_INET, SOCK_DGRAM, 0 );
        //填充地址信息
        m_sockAddr.sin_family = AF_INET;
        m_sockAddr.sin_port = htons( nPort );
        m_sockAddr.sin_addr.s_addr = htonl( INADDR_ANY );
        bind( m_sockListen, ( sockaddr* )&m_sockAddr, sizeof( SOCKADDR ));
        HANDLE hThreadID;   //线程ID
        DWORD thread;
        //创建接收线程
        hThreadID = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )( CChat::ListenThread ) ,
                                   ( void* )this, 0, &thread );
        return TRUE;
}
//接收线程
void* CChat::ListenThread( void *data )
{
        char szBuf[ MAXBUFFER ];
        CChat *pChat = ( CChat* )data;
        int len = sizeof( pChat->m_sockClent );
        while ( TRUE )
        {
                int result = recvfrom( pChat->m_sockListen, szBuf, sizeof( szBuf ) - 1, 0, ( sockaddr* )&pChat->m_sockClent, &len );
                if( result >0 )
                {
                        szBuf[ result ] = 0;
                        cout << szBuf  << endl;//输出接收数据
                }
        }
        return NULL;
}

int main( int argc, char* argv[ ] )
{
        char szBuffer[ MAXBUFFER ];               //发送数据缓存区
        short sListeningPort = PORT;              //绑定端口
        short sDestPort =  PORT;                  //目的端口
        char szDestHost[ 30 ] = "127.0.0.1";      //目标地址
        cout << "初始化............\n";
        CChat myChat;
        myChat.Init( );
        myChat.Listen( sListeningPort ) ;
        cout << "聊天建立,可以聊天\n";
        myChat.EnableBroadcast( 1 ); //设置可以广播
        while ( cin.getline( szBuffer, MAXBUFFER ))
        {
                if ( strcmp( szBuffer, "q" ) ==0 || strcmp( szBuffer,"Q" ) ==0 )
                {
                        char *szMsg = "离开聊天室\n";
                        myChat.SendMsg( szMsg, strlen( szMsg ) + 1,
                        inet_addr( "255.255.255.255" ), sDestPort );
                        break;
                }
                if ( strncmp( szBuffer,"a ", 2 ) == 0 || strncmp( szBuffer,"A ", 2 ) == 0 )
      
                {
           
                        myChat.SendMsg( szBuffer + 2, strlen( szBuffer + 2 ) + 1,
                                        inet_addr( "255.255.255.255" ), sDestPort ) ;
                       
                        continue;
                }
                if ( strcmp( szBuffer,"H" ) == 0 || strcmp( szBuffer,"h" ) == 0 )
                {
                        Help( );//显示帮助信息
                        continue;
                }
               
                 //发送消息  
                myChat.SendMsg( szBuffer, strlen( szBuffer ), szDestHost, sDestPort );       
               
        }
        return 0;
}
回复此楼
我发贴,我成长
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+2,VIP+0):谢谢应助,辛苦了! 11-17 10:32
晕~.~!    4 unresolved externals...

CChat( void );
~CChat( void );
bool SendMsg( char* szMsg, int nLen, unsigned int nHost, short lPort );
bool EnableBroadcast( BOOL bEnable );

上面4个函数在chat.h中声明了,但在chat.cpp中没有实现。
其中构造函数和析构函数如果什么都不作的话,直接在chat.h中删掉就可以了。另外两个函数必须要有实现。

ps:搂住的代码是在网上找的吗,严重怀疑不完整。
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
2楼2009-11-17 10:08:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 王建发 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见