小弟想在公司OA系统当中增加局域网聊天功能,参考了一些网上的源代码,例子采用的是UDPserver和client
但我发现控件还有TCP的server和clint..
因为对这个东西不懂,请教以下的一些问题
我本人倾向与使用服务器端的这种做法,我想在服务器端可以把聊天记录保存。
我想聊天可以做到 点对点 和 多人会议这两种情况.1.想知道 UDP 和TCP 以上用哪种合适,他们有什么区别.?
2.发现有一些聊天程序采用了服务器端和客户端的形式.自以为是服务器端放 server控件 客户端放client控件,但对服务器如何将信息分发给目标client有疑惑?或者说服务器用什么控件将信息接收,而又用什么控件将信息转发到客户端,而客户端是用什么控件接收的信息?
3,看到了一个源代码,他用的UDP。没有使用服务器与客户端的形式。就是没有服务器转发而用广播的形式实现了我想达到的效果。我的问题是:这么做除了不用服务器这个区别外还有什么其他的不同?

解决方案 »

  1.   

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

  2.   

    UDP就是发了,是否收到不管。
      

  3.   

    如果是用服务器的方式,我不知道,服务器端 是 怎么把 A对B说的话发给B的。因为我看的代码是  client控件发送信息  server接受信息。 
    那么我就想到,如果 server接受到了信息,又是怎么给发出去的?
    是让同form下的client发给接收端程序的server 还是 client本身也能接收。 
      

  4.   

    在每个client连接到 server的时候你可以通过 server把当前连接的用户信息发送到每个客户端,这样客户端就可以有选择性了。当client把信息发送到server的时候,这个时候就需要server把当前数据解析下,然后根据当前client选选择的点对点或者群聊的方式发送或者广播给目标客户端了。客户端之间是相互独立的,服务端起到中枢的作用
      

  5.   

    a,在服务器端如何维护已经登录的用户列表;
    b,反向通讯,通过服务器端给客户端发送文件;
    c,实现客户端与服务器端的Chat聊天功能(稍加改动可转化为C->S->C的聊天程序)
    d,如何使用IdTCPServer和IdTCPClient控件
    e,初步实现线程命令方式,在传送文件的时候不会让服务器端停止响应
    不知上面的五项可否满足你的要求
      

  6.   

    对于聊天程序来说,即使丢一些数据,也不会影响信息的交流,因此建议采用UDP方式,这种方式的特点是不需用建立连接,也无数据确认和重传机制,实时性较高。UPD方式也是聊天类软件通常采用的方式。
    TCP是面向连接的,正式通信前要经三步握手协议建立连接(该过程往往比较耗时),建立连接后,在聊天过程中,可能经过好长一段时间双方才会说一句话,但这条连接线路始终存在,资源浪费啊  而且其 数据确认和重传机制会影响聊天的效率。
      

  7.   

    至于Server和Client之间如何通信,这是网络通信方面的编程。
    服务器端创建套接字SOCKET,绑定,然后就等待客户端;
    客户端则创建套接字,然后根据服务器端的IP和端口号向Server发送数据,Server接收函数中会保存Client的地址(包括IP和端口号),这样就可以向Client发送数据了啊
      

  8.   

    公司OA里的聊天,应该是比较正式,才需要在服务器保留所有记录我是采用http(s),所以信息都是客户端向服务端请求的
    发言:本用户 请求 把 字符串 发给 哪些 用户
    听到:本用户 请求 把发给我的新的 字符串 返回给我
      

  9.   

    网络通信indy的控件有很多实例的
      

  10.   

    请海啸老师给代码学习 [email protected]
    万分感谢
      

  11.   

    局域网可能UDP好点,因为网络环境好
      

  12.   

    楼上说的对头,就没有人关心基于Internet通信吗?!