有个问题,想请教大家:
我的服务器与客户端相连,要实时传送数据。服务器端会不断的发数据给客户端,客户端不仅要接受数据,写入数据库;还要不断的从另一张表中取出数据,不断的发给服务器端。这时怎么处理?要用两个socket吗?具体怎么做,要用多线程吗?

解决方案 »

  1.   

    一个socket应该可以, socket的每端每发送一次数据就接收一次数据.如果没有数据到达,就再次发送数据. 具体谁先发,谁先收你自己定就可以了
      

  2.   

    to xx_jj() 异步io,能讲讲吗?或者给个例子?谢谢!
      

  3.   

    你说的很频繁能否具体点如果数据量特别大可以用2个socket(还有网速怎么样?)
    否则一个就可以搞定
      

  4.   

    to alen_ghl(东方求*) 
    频繁,是指数据可能很多,紧接着发送。服务器不断从自己的数据库一张表中取数据发给客户端,这样客户端要不断的接受数据,而客户端取数据库中另一张表的数据,实时发给服务器端。会影响吗?
    网络环境是专线,数据库中的表每条记示并不大。对,socket不很了解。主要我的思路还不很清晰。
      

  5.   

    一个socket就够了,用两个线程,一个收一个发
      

  6.   

    服务器: 从数据库中取数据放入发送缓冲,socket发送。
    客户端:接受数据,写入接受缓冲区,一线程负责将缓冲数据写入数据库表中。一个线程从数据库另一张表中取数据放入发送缓冲区,socket发送。问题是发送和接受之间的协调?是否有冲突?这样思路对吗?
      

  7.   

    to  baodi_z(冷冷的太阳) 
    谢谢!
    是的,服务器和客户端数据没有先后顺序的要求,只要求实时能发给彼此。服务器和客户端收到后入库。客户端收到信息后,不要应答,服务器收到后要应答。一般开发这样的程序都是用winsock api来做,而不用CSock吗?不知有否跟我这项目类似的例程参考一下?
      

  8.   

    这个问题应该与socket方式无关
      

  9.   

    使用CSocket很简单,可以这样处理:
    收和写:
    1 收:
     使用CSocket的OnReceive(),不需要自己开线程(当然实际上是使用了线程的),把收到的收据写到缓冲区中。
    2 写:
     把缓冲区的数据写到数据库中,这需要自己开一个新线程。关键是要处理好缓冲区的同步。读和发:使用一个线程即可,没有必要再使用缓冲区,使用发数据缓冲区的目的一般是为了防止发的速度跟不上读取数据的速度,但你这个程序根本没有必要,因为读取的数据源自己完全可以控制。所以可以读完就发,发完再读。至于Socket,一个就行了,收和发不会互相干扰。当然也可以使用两个,这个不是关键。
      

  10.   

    socket是双工通信,建立连接后两端都是既可以发又可以收的.不需要额外再建socket连接.