有以下程序
Socket Server 简称 ss
socket 客户端1 简称 sc1
socket 客户端2 简称 sc2目前我已经实践SC1、SC2和SS互通现在需要实现 SC1发送给SS 然后SS将消息体转发给SC2?该如何实现?SS功能需要记录之间通讯的信息

解决方案 »

  1.   

    循环Socket Server的可用连接(客户端socket),然后写个线程,循环向他们发送
      

  2.   

    你需要维护一个客户端socket的列表,用select方法,去选取是否可用
      

  3.   

    SC1发送的包里面记录目标为SC2
    SC收到后,根据SC1的目标,找到SC2,发送因为都是长连接,当客户端连接上服务器后,他的地址以及端口号是会被记录的
    就是不清楚能不能透过火墙
      

  4.   

    客户端socket的列表 是什么??如何建立?写到数据库?
      

  5.   

    就是一个列表的数据类型,例如ArrayList
    ipadd = clientSocket.RemoteEndPoint.ToString();
    al.Add(clientSocket);//保存客户端socket之后要转发消息就在al中查找对应的 客户端socket 发送就行了
      

  6.   


    首先要清楚  服务器端有一个接受用户连接的Socket(调用Accept()接受用户连接),该Socket依次接受用户Socket1、Socket2、Socket3……的链接后,存放在一个ArrayList中(或者其他容器,list.Add(Socket1)、list.Add(Socket2)……)
    那么这个list就叫客户端列表啊。
    注意Socket1会对应一个远程客户端Socket、Socket2也会对应另一个远程Socket……
    Socket1、Socket2……都在服务器上
    SOcket1所对应的远程Socket和Socket2所对应的远程Socket之间的通信  完全靠服务器端的Socket1和Socket2中转
    比如Socket1的远程客户端发信息给Socket2的远程客户端,消息先发到服务器,服务器根据消息接受者,在list(也就是客户端列表)中查找对应用户,找到Socket2,然后 Socket2.Send(消息),这样就将消息中转到了Socket2所对应的远程客户端。
      

  7.   

    每次客户端向服务发送连接请求的时候 服务端会new一个clientSocket来建立连接,
    这个时候用al.Add(clientSocket);
    我如何取出,名字都是clientSocket,如何分别呢
      

  8.   

    我不知道我总共有多少客户端,所以我么次接收到连接请求的时候都会new一个socket类
      

  9.   

    加一条登陆消息,把用户名作为关键字,然后把al.Add(clientSocket,用户名)保存下来,这样就可以指定用户了。当然,也可以用IP:PORT保存,像这样al.Add(clientSocket,IP:PORT),不过这样不直观而且容易出问题,最好加个用户名。
      

  10.   

    小弟不才 问下ArrayList.add(clientSocket,用户名)可以接收2个参数??如何实现?
      

  11.   

    ArrayList只能接收一个参数,你换个数据结构不就行了啊。。
      

  12.   

    dictionary<string,string> 
    用它就可以了、。
    http://www.cnblogs.com/yank/archive/2007/11/23/969773.html
      

  13.   

    我还有点问题,想请大家帮忙解决下,如果我用了
    dictionary来访clientSocket,那么如何知道某个clientsocket已经断开了,需要重新连接呢