高手请进!!如何用socket实现多点通信,就像聊天软件一样。UP者有分
如上!! 问题点数:100、回复次数:27Top
1 楼wistaria(听风听雨)回复于 2002-07-05 13:04:45 得分 10
http://www.hoversoft.net/code/2001code/code/vcmfc_winpopup.zip.ld
使用WinSock的聊天室程序Top
2 楼sans(长风半日)回复于 2002-07-05 13:14:35 得分 3
http://codeguru.com/Top
3 楼jifone(季风)回复于 2002-07-05 13:17:48 得分 3
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 ITop
4 楼jfzsl(剿匪总司令)回复于 2002-07-05 13:19:11 得分 3
gzTop
5 楼egyptcaesar(笨小孩)回复于 2002-07-05 13:25:29 得分 0
我要实现多点通讯,我是不是应该在服务器上对每一个连接请求都建立一个Socket??Top
6 楼zzzzzz7()回复于 2002-07-05 13:32:01 得分 5
创建SOCKET数组,有联接请求时,使用socket()初始化Top
7 楼peon(加菲-加菲 一只特立独行的猫)回复于 2002-07-05 13:32:01 得分 3
微软的站点有下:
http://msdn.microsoft.com/cccp/msdn-files/026/001/371/mfc_advanced_chatsrvr.exe
http://msdn.microsoft.com/library/en-us/dnsamples/mfc_advanced_chatter.exeTop
8 楼peon(加菲-加菲 一只特立独行的猫)回复于 2002-07-05 13:34:36 得分 0
我要实现多点通讯,我是不是应该在服务器上对每一个连接请求都建立一个Socket??
的确需要Top
9 楼egyptcaesar(笨小孩)回复于 2002-07-05 13:47:05 得分 0
可能我没有说清楚,我的意思是,做一个在局域网上点对点聊天软件,但是,可能有很多人同时在线,比如说向QQ一样,我把他的用户名一点击,就可以和对方聊天,把另外一个人一点,就可以和另外一个人聊天。对于socket面向连接的,和无连接的方式。设计思路应该是什么??用哪一个好一些?
一台机子可能接受很多连接,是不是对应每一个连接,都应该建立一个socket?另外怎么样知道其他人连线了??在这个应用里,是不是必须有一个服务器,用户登陆时,给服务器发送消息,然后服务器再把这个用户的信息发送到每一个练线的机子上?
有没有人做过类似的软件,如果什么想法,能不能告诉我!!些了先!!我都快愁死了
还有一个问题,能不能一台机子上的统一端口多次绑定?Top
10 楼egyptcaesar(笨小孩)回复于 2002-07-05 14:19:04 得分 0
UPTop
11 楼seep(阿冰)回复于 2002-07-05 14:42:07 得分 3
你可以向viper_sh@citiz.net要一个聊天的源代码
或者给我发邮件haiquan@comeinfo.com
我把他的源代码发给你,写得不错Top
12 楼egyptcaesar(笨小孩)回复于 2002-07-05 15:07:57 得分 0
UPTop
13 楼mfkzj(鹰翔)回复于 2002-07-05 15:16:33 得分 15
需要阿 需要为每一个用户建立一个SOCKET连接
反正这样也可以实现 每一个发送信息都有个固定格式 比如钥发给哪几个人 发送对象 是否公开显示 发送内容
在每次登陆和退出都发送一个确认消息
我以前做过一个你需要的聊天程序 不过很初级 因为后来没有时间研究了 就没有继续下去 如果你需要可以给你看看 mfkzj@263.netTop
14 楼egyptcaesar(笨小孩)回复于 2002-07-05 15:57:19 得分 0
UPTop
15 楼flyingjust(just)回复于 2002-07-05 17:25:18 得分 5
gzTop
16 楼wanghao0727(王浩)回复于 2002-07-05 17:31:53 得分 5
你可以直接使用我的DLL来完成这个工作,它封装了连接的过程。Top
17 楼egyptcaesar(笨小孩)回复于 2002-07-06 00:45:27 得分 0
UPTop
18 楼yuanjun1029()回复于 2002-07-06 09:09:21 得分 5
用UDP不用建连接!!!!Top
19 楼egyptcaesar(笨小孩)回复于 2002-07-06 10:38:50 得分 0
UPTop
20 楼wuxuan(真心英雄)回复于 2002-07-06 18:17:06 得分 5
你可以参见LINUX系统的超级服务器的概念,就是通过管理一个连接服务器,并不需要每一个用户就建立一个连接,如果每个建立的话,QQ就会累死了。
Top
21 楼wanghao0727(王浩)回复于 2002-07-06 18:53:44 得分 7
想建立一个流式流接,一定要创建一个新的Socket(还有一种技术叫重叠I/O),QQ使用的是P2P方式,并不是要让大家都与服务器相连。Top
22 楼goldolphin(心向天空)回复于 2002-07-06 19:12:48 得分 8
我做了一个局域网聊天程序,用UDP实现非连接的文本聊天和语音,语音在多人向同一个发送时有一些问题。用TCP实现文件传送。没有服务器端。
不过目前有一些BUG,完善中,如果有这方面的问题可以发邮件给我
goldolphin@etang.com
我在CSDN上放了老版本的下载(只支持文本聊天)
http://www.csdn.net/cnshare/soft/11/11094.shtmTop
23 楼sunsea666(少楠)回复于 2002-07-06 20:31:04 得分 5
qq的类似的工具,也在研究,呵呵,UP!Top
24 楼liuhai_2599(大海)回复于 2002-07-06 21:02:20 得分 5
upTop
25 楼RedBiaoJi(WWW)回复于 2002-07-06 23:07:35 得分 5
最简单的模式:
you-->server-->the other 公开聊模式
you----------------->server-->one 私聊模式
同时发送特定标志
次种模式下,你所有的数据对server都是透明的。Top
26 楼daehappy(追求120%结贴)回复于 2002-07-07 13:45:36 得分 5
up!gz!Top




