Chinaunix

标题: 如何 在 LINUX下 用SOCKET套接字实现双机聊天功能 [打印本页]

作者: 锋利fighting    时间: 2011-11-27 19:55
标题: 如何 在 LINUX下 用SOCKET套接字实现双机聊天功能
如题 ,我学需 LINUX应用程序 编程 没有 多久,我能够 用SOCKET实现本机服务端和客户端聊天,但应该怎么实现双机或多机聊天呢?
作者: hanzhenlll    时间: 2011-11-28 19:10
你可以看看 网络编程发面的书...

客户端和服务器 实现一对一,  WHILE (1)就可以了

服务端用多路I/O  select 或者 poll epoll 就可以实现  1对多了

服务端再把 客户端的fd信息保存起来,随时切换就成了 多对多了....  通过server转发,也就是大多数聊天软件的模式了...
作者: snow888    时间: 2011-11-29 08:24
qq 不是通过服务器转发的。
作者: crazyhadoop    时间: 2011-11-29 09:30
方案很多~~ 你能想到的办法都可以,差别就是能不能扩展,能不能多人
作者: hanzhenlll    时间: 2011-11-29 10:33
qq 不是通过服务器转发的。
snow888 发表于 2011-11-29 08:24



    早期是的,而且现在好像应该也是吧,但是现在可以设置的。。。 你可以看下,VIP功能里面就可以把你之前的聊天纪律都调出来......很明显当时聊天的内容被保存下来...
作者: snow888    时间: 2011-11-29 11:15
早期是的,而且现在好像应该也是吧,但是现在可以设置的。。。 你可以看下,VIP功能里面就可以把你 ...
hanzhenlll 发表于 2011-11-29 10:33



    晕,同时在线的qq有多少,什么样的服务器可以承受?

这不是网站,是实时的连接 。。。

事实上,某些时候你会发现,你已经掉线了,可依然能与你的好友聊天 。。。


作者: 锋利fighting    时间: 2011-11-29 17:52
回复 2# hanzhenlll


    具体什么书,介绍LINUX网络编程比较好,适合进一步学习网络编程?
作者: hanzhenlll    时间: 2011-11-30 21:53
晕,同时在线的qq有多少,什么样的服务器可以承受?

这不是网站,是实时的连接 。。。

事实 ...
snow888 发表于 2011-11-29 11:15



    你不知道这个世界上还有种技术较多 分布式集群吗....
另外我也没有跟你讨论udp  还是tcp .....

作者: hanzhenlll    时间: 2011-11-30 21:54
回复  hanzhenlll


    具体什么书,介绍LINUX网络编程比较好,适合进一步学习网络编程?
锋利fighting 发表于 2011-11-29 17:52



    unix 网络编程 卷1 卷2 可以先拿来参考....
作者: snow888    时间: 2011-11-30 22:16
你不知道这个世界上还有种技术较多 分布式集群吗....
另外我也没有跟你讨论udp  还是tcp .....
...
hanzhenlll 发表于 2011-11-30 21:53



    晕,俺一直认为你是知道 qq 用的是 udp 的,否则俺根本就不会与你讨论了。

这也是俺在回帖的时候没有说是 udp还是 tcp 协议的原因。

你还能知道分布式集群,不容易啊。

那么你认为一台服务器能同时支持多少客户端的并发连接? 多算一点,就算 1 万吧 。  qq 每天在线的有多少?不少于数亿吧,腾讯部署了多少台服务器啊?

算了,你如何认为是你的事。

俺不再讨论这个问题了。
作者: 729926317    时间: 2011-12-01 15:49
我也才知道QQ用的是UDP阿。。。。
作者: 729926317    时间: 2011-12-01 15:53
回复 10# snow888


    qq不是转发的话,那是两个用户之间单独建立了TCP链接,或者用udp直接进行通信?
作者: snow888    时间: 2011-12-01 16:05
回复  snow888


    qq不是转发的话,那是两个用户之间单独建立了TCP链接,或者用udp直接进行通信?
729926317 发表于 2011-12-01 15:53



    qq 的通讯大致情况是这样的。

qq 登录时,向服务器发送一个信息,告知服务器已经登录,服务器根据维护的列表,向其有关联的好友发送登录的qq已经上线的信息,并同时发送该qq用户的IP地址。然后每过一定的时间,会重复这个步骤。

qq 聊天时,从本地取出服务器发送到的好友的IP地址,建立 p2p 连接,这个时候是两个qq客户端的连接,与服务器没有任何联系了,连接的协议采用的是 UDP,保证数据完整性是通过上层协议来完成的,不是通过通讯协议本身来完成的(UDP协议完成不了数据完整性校验),如果 p2p 连接失败,则 qq 客户端转而与服务器连接,通过服务器转发,服务器判断对方的 qq 是否在线,如果在线,则转发,如果不在线,返回给发送消息的 qq 客户端相应信息。
作者: hbmhalley    时间: 2011-12-03 18:17
《Unix网络编程》
里面有例子
作者: djsxut    时间: 2011-12-05 09:49
看的资料好像是qq二个用户是udp,文件传输是tcp?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2