当QQ在线时候应该是建立了一个线程对服务器进行心跳测试,一旦QQ下线(无论是正常关闭程序还是一场结束程序),服务器收不到QQ发来的消息立即向其他用户发送通知,那这个机制是采用UDP群发还是TCP群发呢(我不清楚是遍历用户发送还是可以像广播那样发送)?我现在做了一个类似QQ的聊天程序基于UDP的,create选中数据包后利用sendto发送消息时候不知道参数怎么填写,MFC是这样写的:
int SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 );
int SendTo( const void* lpBuf, int nBufLen, const SOCKADDR* lpSockAddr,int nSockAddrLen, int nFlags = 0 );
说明:
对于数据报套接字,SendTo的成功结束并不意味着数据一定成功地发送到了目的地。
由参数lpSockAddr指明具体目标套接字发送数据报时,SendTo仅用于SOCK_DGRAM型的套接字。
发送广播数据(仅用于SOCK_DGRAM型的套接字),参数lpSockAddr指明的地址应该由一个特殊的IP地址:INADDR_BROADCAST(它在Windows Sockets的头文件WINSOCK.H中定义)和相应的端口号构成。此外,如果参数lpszHostAddress为NULL,则套接字也用于广播发送。数据报的数据部分不能超过512字节,因此广播的数据报最好不要超过这个数字,以避免数据的分割。
是不是IP地址这里填写NULL,如果是填写NULL,那么发送的数据是向某一个网段广播还是整个广域网广播呢?
真诚谢谢各位的回答!