Private sub sckserver_connectrequest(Index as Integer,Byval requestid as long) dim sip as string dim I as integer sip=sckserver(0).RemoteHostIP '获得登录者的IP地址 I=1 Do while I<=sckserver.ubound '检查是否已经有该地址的记录 If sckserver(I).RemoteHostIP=sip then '如有,不必加载新的控件 Sckserver(I).Accept requestid Exit sub End if I=I+1 Loop Load sckserver(I) '否则,加载新的控件 Scksrver(I).accept requestID End sub 注意到:以上的信息交谈实际上都发生在客户机与服务器之间,如果要做成聊天室那样,每个人的话都可以被别人“听到”,那就要在服务器端的DataArrival事件中,把接收到的客户机传来的数据,转发给所有客户机即可。 其循环转发信息的代码如下: For I=1 to sckserver.count if sckserver(I).state<>sckclosed then sckserver(I).SendData sdata end if next I
dim sip as string
dim I as integer
sip=sckserver(0).RemoteHostIP '获得登录者的IP地址
I=1
Do while I<=sckserver.ubound '检查是否已经有该地址的记录
If sckserver(I).RemoteHostIP=sip then '如有,不必加载新的控件
Sckserver(I).Accept requestid
Exit sub
End if
I=I+1
Loop
Load sckserver(I) '否则,加载新的控件
Scksrver(I).accept requestID
End sub
注意到:以上的信息交谈实际上都发生在客户机与服务器之间,如果要做成聊天室那样,每个人的话都可以被别人“听到”,那就要在服务器端的DataArrival事件中,把接收到的客户机传来的数据,转发给所有客户机即可。
其循环转发信息的代码如下:
For I=1 to sckserver.count
if sckserver(I).state<>sckclosed then
sckserver(I).SendData sdata
end if
next I
http://msdn.microsoft.com/cccp/msdn-files/026/001/371/mfc_advanced_chatsrvr.exehttp://msdn.microsoft.com/library/en-us/dnsamples/mfc_advanced_chatter.exe
一台机子可能接受很多连接,是不是对应每一个连接,都应该建立一个socket?另外怎么样知道其他人连线了??在这个应用里,是不是必须有一个服务器,用户登陆时,给服务器发送消息,然后服务器再把这个用户的信息发送到每一个练线的机子上?有没有人做过类似的软件,如果什么想法,能不能告诉我!!些了先!!我都快愁死了还有一个问题,能不能一台机子上的统一端口多次绑定?
或者给我发邮件[email protected]
我把他的源代码发给你,写得不错
反正这样也可以实现 每一个发送信息都有个固定格式 比如钥发给哪几个人 发送对象 是否公开显示 发送内容
在每次登陆和退出都发送一个确认消息
我以前做过一个你需要的聊天程序 不过很初级 因为后来没有时间研究了 就没有继续下去 如果你需要可以给你看看 [email protected]
不过目前有一些BUG,完善中,如果有这方面的问题可以发邮件给我
[email protected]
我在CSDN上放了老版本的下载(只支持文本聊天)
http://www.csdn.net/cnshare/soft/11/11094.shtm
you-->server-->the other 公开聊模式
you----------------->server-->one 私聊模式
同时发送特定标志次种模式下,你所有的数据对server都是透明的。