建一个服务器端,是否需要建一个socket数组来存储每次客户端连入的socket,服务器向客户端发数据时再从socket数组中找出该客户端socket信息进行发送?

解决方案 »

  1.   

    1 理论上应该有个集合来存储客户的信息,当然包括SOCKET句柄
    2 至于是不是要从集合中查找SOCKET句柄,这个要看你的具体逻辑了。
      

  2.   

    可以用FOR循环查询你的那个用户集合,然后找到对应的SOCKET句柄,然后SEND
      

  3.   

    只要看你的架构是什么样的。c/s服务器端不需要保存客户端socket,因为服务器只所以返回客户端信息,都是因为客户端首先访问服务器,而服务器能够accept到客户端连接并接收数据,accept操作本身就返回了客户端socket,程序在接受一个请求之后计算出结果就直接用这个socket返回信息就可以了,不需要再额外去找其它的什么socket。
      

  4.   

    你自己画一个序列图会更明白,首先是客户端向服务器发送信息,服务器这时候会话生命周期开始,服务器接下来计算要返回的信息,然后用这个会话返回结果,这个会话就结束了。当客户端另一个信息发送到服务器,服务器另一个会话生命周期开始,底层系统也许会给服务器的Accept命令返回同一个socket,也可能实例化的不是原来那个socket,但是有什么关系呢?服务器反正是用Accept命令得到的socket对象发送回复信息。c/s服务器通常是应付无限多的客户端,世界上任何客户端都可能进来访问服务器。只有一种情况需要用什么数组保存对方的socket,就是服务器还是个客户端,负责主动跟一些自己认识的客户端联系,但这已经不是c/s架构,而是对等的网络了。
      

  5.   

    SP1234大哥这个也是一种情况,如果你不需要服务器主动给客户端发消息。可以直接根据其SOCKET句柄,直接下发数据。
      

  6.   

    你开发一个WinForm程序它能够另外一些WinForm程序聊天,可以主动发消息,这叫做服务器吗?我想那些告诉这个机制叫做服务器的人,它大概没有开发过企业级的服务器吧。
      

  7.   

    我开发的是:直接用ASP.NEt以web形式处理SOCKEt通信,以前WEB只是负责数据发布,现在整合一个功能。我现在是将所有连接信息都保存在HASTABLE(哈希表)中,通过key的唯一性,找到对应的value值(SOKCET)。
    public static Hashtable HTsession;// 保存所有客户端会话的哈希表, 在SOCKET类中
    从网页界面上调用,但有时候哈希中内容会丢失,这是为什么?怎么解决?