正在做一个项目要求的局域网内即时传送消息的模块,设计要求是采用TCP/IP C/S模式,S与C为同一个应用程序。初步的想法为程序启动时先作为客户端搜寻网内可用的聊天对象(应用程序另外的一个或多个运行复本)并建立对应的连接,然后作为服务器进入监听,以供后来者搜寻并与之建立连接。运行过程中要求能随时选择要与哪个聊天对象进行交流。
问题如下:
    1.如何搜寻网内已经运行的服务器(多个)并建立与它们的联接?(考虑过用广播消息、然后让服务器主动建立连接的方式,是否可行?那样是不是要用UDP才行?)
    2.对待这些连接有两种方式:一种是建立一个连接列表,在整个运行期间保持这些连接;另一种是对于搜寻到的每一个服务器保存它的地址信息,并建立一个对应的标识列表,但不保持连接,到要与哪个进行交流时再根据对应的地址信息重新建立连接,一次交流完成即断开连接。哪种方法要好些?
    3.可否采用异步方式来实现(如果连接是保持的,连接的双方可以同时发送信息吗?)
    4.是否一定要使用多线程?
小弟是socket初鸟,连自己提的这些问题是否表述清楚了都不大肯定。敬请各位大虾不吝赐教!(分不够可以加!)

解决方案 »

  1.   

    http://www.vczx.com/article/show.php?id=188
    这个可以满足你的要求,你可以适当修改一下就可以了。
      

  2.   

    谢谢你,wwwIIg,那个确实做得很有意思,但远不是我要的。况且我并不只是想找一个可以实现这一场景的方法,而是想弄清楚我提的那几个问题!
    方便的话,你可以跟我说一下吗?
      

  3.   

    1.如果要广播的话,肯定要用udp
    2.根据你的业务要求,最好用udp,如果用tcp,太慢并且资源耗费太大。
    3.你可以隔一定时间广播自己的身份,告知别的服务器
    4.不一定用多线程,可以用事件模式
      

  4.   

    1.如果搜寻网内已经运行的服务器(多个)并建立与它们的联接,最基本应该知道对方的端口号,然后再用UDP对本网段进行广播,服务器收到广播消息后,进行回复.这是一种方法;
       还有一种方法是建立一个数据库或文件,每个服务器端起动后都在数据库中加入自己的IP和端口号.其他程序启动时,对这个数据库就可以了.
    2.第一个方法好些,对于系统的资源占用的较少,而且通信可以用udp方式
    3.如果连接是保持的,连接的双方可以同时发送信息,这个没有问题.但是一个程序如何处理多个接收?我想可能会用多线程机制.
    4.可以考虑使用
      

  5.   

    谢谢各位的帮忙!duyhui的答复对我有很大启发,问题的解决正在进一步进行中。如果可以对我提的那些问题展开深入的讨论的话,那就最好了!
    另:有人可以给我一个UDP广播的实例吗?