最近在搞一个CS架构的聊天课程设计!一个客户端使用一个Socket连接,但是要实现多人同时聊天!要怎么实现,将从服务器获取的聊天内容准确返回到具体的聊天窗口中呢?

解决方案 »

  1.   

        当然连接就一个,建立一个Server,然后客户端是多个的,每个请求连接成功的客户端和Server之间都是相对独立的一个会话,一般都是在不同线程中进行数据收发处理的,我这里说的是多个客户端和一个服务端进行通讯,如果各个客户端要想到通信的话,其实两个客户端之间还是服务端和客户端的关系,都是可以用这种思路处理的。
        不好意思我这里没有符合的代码。
        其实如果你已经写好了服务端和客户端通讯这一块的话,那接下来就是需要聊天时给客户端实例化独立的窗口,然后在窗口类中做该客户端数据收发的处理就行了。如果同时还要和另一个客户端聊天,再实例化一个对应的窗口做相应处理就行了。
      

  2.   

    你客户端连接了之后可以多开一个线程来接收数据,或者用异步(系统帮你开了一个线程)接收数据,然后你的工作(接收线程)线程根据接收到的数据(消息头)来判断要执行什么操作,如果工作线程(接收线程)要操作主窗口或者主窗口的控件,就用委托,因为不能在非UI线程上操作UI控件,所以工作线程要委托UI线程来操作控件。
      

  3.   

    而你说的服务器转发到各个客户端窗口的问题。先用字典集合来储存连接的socket,项是RemoteEndPoint,值是连接的socket的引用,服务器通过RemoteEndPoint来确定socket,然后通过这个socket来发给相应的客户端窗口。
      

  4.   

    如果你的是TCP socket,要注意消息边界的问题。
      

  5.   

    我的是TCP的!什么事消息边界呢?
      

  6.   

    多线程socket  +   tcp/ip +  udp  
      

  7.   


    不是什么都需要用 tcp的   udp 在服务器用 减少压力tcp作为 客户端的 轮询 介质
      

  8.   

    因为TCP是流式的,比如你发送2次消息"abcdef"、"gh",接收的时候不一定是说第一次就接收"abcdef",第二次就接收"gh",可能接收的时候是分3才接收:1:"abc",2:"def",3:"gh",也可能是一次就接收:"abcdefgh"。TCP保证是按顺序和完全接收(一定是abcdefgh,不会说ghabcdef),但是不保证发送的和接收的次数一样。