小弟最近正在写一个跟QQ差不多的程序.实现互动聊天,用的是D6的ServerSocket&ClientSocket控件.
TCP方式的.俺开始准备采用UDP的.但太复杂了.有服务端.
现在有几个问题难倒小弟了,请大虾们指点迷津:1. 连接该用线程来处理吗?使用该工具的人大概有近1000人吧.收发信息包括登录都采用线程方式来处理吗?? 如果采用线程方式,怎么实现呢?
2. 在线列表俺是保存在数据库里的,据IP判断用户.但如果客户端非正常断开.服务端就不会处理其下线(断开)操作.即该ID还在在线列表中.
3. ServerSocket等控件的异常怎么捕获不到呀!~!比如服务端未打开.报100061等错误.但我已经try 了但是不按我的方式来处理.

解决方案 »

  1.   

    好象有本DELPHI6网络编程的书,里面有个例子,跟你的要求差不多
      

  2.   

    1.可以使用线程,特别是登录验证等处理信息,
    2.服务端间隔轮询,没有响应的就kill掉。
    3.应该可以捕获的吧。可能没写对哟。
      

  3.   

    1000多人无须考虑太多,我写过这样的程序...用心跳机制来解决 异常断开吧QQ也是这样处理的OnError事件里ErrorCode
      

  4.   

    客户端每隔一段时间发送UDP包给服务器,服务器可以知道每个客户端的具体的IP和端口号。
    然后把要相互通信的客户端C1和C2的最新的IP和端口号相互交换一下,C1和C2就可以直接通信了,应该就是这样子的……。
    如果C1或C2有一个没有上线,那么就直接和服务器通信,并把信息积存在服务器里。
      

  5.   

    楼上哥哥说的:{把要相互通信的客户端C1和C2的最新的IP和端口号相互交换一下,C1和C2就可以直接通信了} 是不行地。俺开始也这么 认为,后来读了一篇SOCKET5穿透的文章才知道原理上行不通,感谢各位的帮助,只有再多试试了。