读书人

局域网聊天若干有关问题求教

发布时间: 2012-02-12 17:16:33 作者: rapoo

局域网聊天若干问题求教
小弟想在公司OA系统当中增加局域网聊天功能,参考了一些网上的源代码,例子采用的是UDPserver和client
但我发现控件还有TCP的server和clint..
因为对这个东西不懂,请教以下的一些问题
我本人倾向与使用服务器端的这种做法,我想在服务器端可以把聊天记录保存。
我想聊天可以做到 点对点 和 多人会议这两种情况.

1.想知道 UDP 和TCP 以上用哪种合适,他们有什么区别.?
2.发现有一些聊天程序采用了服务器端和客户端的形式.自以为是服务器端放 server控件 客户端放client控件,但对服务器如何将信息分发给目标client有疑惑?或者说服务器用什么控件将信息接收,而又用什么控件将信息转发到客户端,而客户端是用什么控件接收的信息?
3,看到了一个源代码,他用的UDP。没有使用服务器与客户端的形式。就是没有服务器转发而用广播的形式实现了我想达到的效果。我的问题是:这么做除了不用服务器这个区别外还有什么其他的不同?

[解决办法]
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

[解决办法]
第2个问题就靠你程序的机制了,你可以把每个客户端的相关信息保存,然后就可以决定是采用点对点,或者是广播的形式了。而不是像你说的需要什么组件。
[解决办法]
在每个client连接到 server的时候你可以通过 server把当前连接的用户信息发送到每个客户端,这样客户端就可以有选择性了。

当client把信息发送到server的时候,这个时候就需要server把当前数据解析下,然后根据当前client选选择的点对点或者群聊的方式发送或者广播给目标客户端了。

客户端之间是相互独立的,服务端起到中枢的作用
[解决办法]
对于聊天程序来说,即使丢一些数据,也不会影响信息的交流,因此建议采用UDP方式,这种方式的特点是不需用建立连接,也无数据确认和重传机制,实时性较高。UPD方式也是聊天类软件通常采用的方式。
TCP是面向连接的,正式通信前要经三步握手协议建立连接(该过程往往比较耗时),建立连接后,在聊天过程中,可能经过好长一段时间双方才会说一句话,但这条连接线路始终存在,资源浪费啊 而且其 数据确认和重传机制会影响聊天的效率。
[解决办法]
公司OA里的聊天,应该是比较正式,才需要在服务器保留所有记录

我是采用http(s),所以信息都是客户端向服务端请求的
发言:本用户 请求 把 字符串 发给 哪些 用户
听到:本用户 请求 把发给我的新的 字符串 返回给我
[解决办法]
局域网可能UDP好点,因为网络环境好
[解决办法]

探讨
请海啸老师给代码学习 gyqhpp@163.com
万分感谢

读书人网 >.NET

热点推荐