局域网聊天若干问题求教

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

1.想知道 UDP 和TCP 以上用哪种合适,他们有什么区别.?
2.发现有一些聊天程序采用了服务器端和客户端的形式.自以为是服务器端放 server控件 客户端放client控件,但对服务器如何将信息分发给目标client有疑惑?或者说服务器用什么控件将信息接收,而又用什么控件将信息转发到客户端,而客户端是用什么控件接收的信息?
3,看到了一个源代码,他用的UDP。没有使用服务器与客户端的形式。就是没有服务器转发而用广播的形式实现了我想达到的效果。我的问题是:这么做除了不用服务器这个区别外还有什么其他的不同?
...全文
205 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjkto 2010-01-06
  • 打赏
  • 举报
回复
已发送
hjkto 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 gyq2hpp 的回复:]
请海啸老师给代码学习 gyqhpp@163.com
万分感谢
[/Quote]
叫的我太开心了,马上给你
Harryfin 2010-01-06
  • 打赏
  • 举报
回复
局域网可能UDP好点,因为网络环境好
微笑的水 2010-01-06
  • 打赏
  • 举报
回复
看了楼上诸位的讲解 有一定的概念了.
微笑的水 2010-01-06
  • 打赏
  • 举报
回复
请海啸老师给代码学习 gyqhpp@163.com
万分感谢
wliaoc 2010-01-06
  • 打赏
  • 举报
回复
网络通信indy的控件有很多实例的
xiaowei_001 2010-01-06
  • 打赏
  • 举报
回复
楼上说的对头,就没有人关心基于Internet通信吗?!
kfcoffe 2010-01-05
  • 打赏
  • 举报
回复
在每个client连接到 server的时候你可以通过 server把当前连接的用户信息发送到每个客户端,这样客户端就可以有选择性了。

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

客户端之间是相互独立的,服务端起到中枢的作用
haitao 2010-01-05
  • 打赏
  • 举报
回复
公司OA里的聊天,应该是比较正式,才需要在服务器保留所有记录

我是采用http(s),所以信息都是客户端向服务端请求的
发言:本用户 请求 把 字符串 发给 哪些 用户
听到:本用户 请求 把发给我的新的 字符串 返回给我
微笑的水 2010-01-05
  • 打赏
  • 举报
回复
如果是用服务器的方式,我不知道,服务器端 是 怎么把 A对B说的话发给B的。

因为我看的代码是 client控件发送信息 server接受信息。
那么我就想到,如果 server接受到了信息,又是怎么给发出去的?
是让同form下的client发给接收端程序的server 还是 client本身也能接收。
微笑的水 2010-01-05
  • 打赏
  • 举报
回复
UDP就是发了,是否收到不管。
slvher 2010-01-05
  • 打赏
  • 举报
回复
至于Server和Client之间如何通信,这是网络通信方面的编程。
服务器端创建套接字SOCKET,绑定,然后就等待客户端;
客户端则创建套接字,然后根据服务器端的IP和端口号向Server发送数据,Server接收函数中会保存Client的地址(包括IP和端口号),这样就可以向Client发送数据了啊
kfcoffe 2010-01-05
  • 打赏
  • 举报
回复
第2个问题就靠你程序的机制了,你可以把每个客户端的相关信息保存,然后就可以决定是采用点对点,或者是广播的形式了。而不是像你说的需要什么组件。
kfcoffe 2010-01-05
  • 打赏
  • 举报
回复
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

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

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
slvher 2010-01-05
  • 打赏
  • 举报
回复
对于聊天程序来说,即使丢一些数据,也不会影响信息的交流,因此建议采用UDP方式,这种方式的特点是不需用建立连接,也无数据确认和重传机制,实时性较高。UPD方式也是聊天类软件通常采用的方式。
TCP是面向连接的,正式通信前要经三步握手协议建立连接(该过程往往比较耗时),建立连接后,在聊天过程中,可能经过好长一段时间双方才会说一句话,但这条连接线路始终存在,资源浪费啊 而且其 数据确认和重传机制会影响聊天的效率。
qkhhxkj102 2010-01-05
  • 打赏
  • 举报
回复
帮顶
hjkto 2010-01-05
  • 打赏
  • 举报
回复
a,在服务器端如何维护已经登录的用户列表;
b,反向通讯,通过服务器端给客户端发送文件;
c,实现客户端与服务器端的Chat聊天功能(稍加改动可转化为C->S->C的聊天程序)
d,如何使用IdTCPServer和IdTCPClient控件
e,初步实现线程命令方式,在传送文件的时候不会让服务器端停止响应


不知上面的五项可否满足你的要求
kfcoffe 2010-01-05
  • 打赏
  • 举报
回复
hjkto

呵呵,你确实比较强。
hjkto 2010-01-05
  • 打赏
  • 举报
回复
源码要不要啊?
微笑的水 2010-01-05
  • 打赏
  • 举报
回复
继续顶一下等更多的指点
加载更多回复(1)

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧