关闭

今天又因为出现莫名其妙的问题而郁闷了一个晚上

标签: 服务器数据库vector存储socketstring
1195人阅读 评论(0) 收藏 举报
分类:

       从晚上6点半开始调试程序,关于毕业设计的CSCW系统中客户端在线用户用户的刷新,现在虽然程序已经可以正常运行了,但还是不知道为什么错,根本就是见鬼!!!

       CSCW系统,当用户登录到服务器时,更新服务器端的数据库中用户的在线状态,然后再从数据库中查找出所有的在线用户,再发给所有的在线用户。服务器和客户端之间的通信是通过socket+对象输入/输出流,昨天的错误让我调试了12个钟头,今天的错误调试6个钟头。。。。

     程序中的错误:当用户A登陆时,服务器更改数据库中A用户的在线状态,然后读取所有的在线用户信息。并发给所有用户,当然,这个包括A用户本身。当A用户成功登陆时,就为A用户建立一个监听线程,监听从服务器上发过来的消息。其中,在线用户信息就是通过这个监听线程显示在客户端的界面上的。当只有一个用户A登陆时(即只有管理员在),那么在线用户列表在A的面板上正确显示。如果这时有个用户,B登陆时,那么服务器也将更新数据库中B用户的在线状态,在把数据库中的在线状态用户发给A和B本身。这时问题出现了,A用户和B用户都能接收到相同的在线用户消息,但是在提取在线用户的用户名时,A用户始终看不到B客户,而B客户又能看到A客户。通过测试,我发现A用户和B用户接收到的在线用户消息时一样。如果再又一个用户C登陆时,C可以看到A和B用户,但A、B用户看不到C登陆了,B用户也看不到A用户。明明所有的客户端都接收到相同的在线用户信息,并且所有客户端的监听线程是一样的。这真的是见鬼了。刚开始,我使用java.awt.list来存储在线用户的名字,以为是因为这个问题,又改成用vector,但结果都一样,程序在算法上肯定没问题,好像是因为使用了list和vector才会这样,如果是String对象,一切正常。最后我想到了使用StringBuffer来存储用户名,中间使用“:”来分隔,结果正确了。不知道这是因为程序的问题还是jdk的问题,搞不懂。。。。

      今天的任务只完成了一半。还得抓紧时间,聊天功能实现了,现在进入关键时刻,文本操作得一致性控制。希望能在两天的时间做完。。。然后做图形的一致性控制。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30815次
    • 积分:395
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:5篇
    • 译文:1篇
    • 评论:22条
    文章分类
    最新评论