我用Winsock做了一个服务器接收程序,运行在2003服务器上,接收大概30个GPRS客户端发送的心跳包(每隔30秒)和一些实用的数据(需要今后被查询的,所以写入数据库),心跳包是用来确认是否在线(直接修改SQL2000数据库的某个表确认它在线),实用数据是被写入SQL2000数据库之前,整个接收到的数据写入TXT文本,然后打开数据库---写数据---关闭数据库连接问题来了:1. TXT(xxxxx.log)文件打开能看到接收到的数据,但是,写入SQL2000数据库的只是部分的,不全,这个为什么?
2.是不是发送的数据来不及处理?
3.有什么更好的方法能解决这样的问题?抓狂抓狂!望大神指点指点!我的目的就是把接收到的数据写入数据库,不要丢失(100分奉上)

解决方案 »

  1.   

    没有具体的描述,只能猜测30个客户端的数据写数据库有并发冲突。可以考虑将接收和数据处理分成两个 exe。
    接收程序每收到客户端的一次数据(心跳包、业务数据)就写一个文件。
    数据处理程序就是不停扫描目录,发现一个文件就处理一次,这样不会有并发。又:作为仅有一个实例的数据处理程序,数据库连接保持常开即可。
    不停开/关的方案适用于大量客户端连接数据库的场景。
      

  2.   

    大神!追问一下!扫描目录的话,应该怎么做?是去处理.LOG(.TXT)文件里的数据吗?还是什么?没有经验,望大神指点一二!
      

  3.   

    接收程序先在 A 目录临时写文件,写完后将文件 Move 到 B 目录。
    数据处理开定时器,用 Dir 函数扫描 B 目录,发现一个就读文件、写数据库,处理完后就 Move 到 C 目录(如果不需备份就直接删除)。
      

  4.   


    能说一下 怎么读文件吗(text1.text还是什么)?读出来放哪?再怎么将这些数据处理进数据库啊?方便的话时候可以写个例子!不胜感激!
      

  5.   

    既然你写入txtx正常,写入数据不完整,肯定是你的写入数据库的代码有问题
      

  6.   

    看 MSDN 帮助或 Google 之。
    写是变量到文件,读是文件到变量。
    原先怎么将变量写入数据库照旧。