socket数据传输问题?

axiang80 2006-02-15 02:45:59
有个问题,想请教大家:
我的服务器与客户端相连,要实时传送数据。服务器端会不断的发数据给客户端,客户端不仅要接受数据,写入数据库;还要不断的从另一张表中取出数据,不断的发给服务器端。这时怎么处理?要用两个socket吗?具体怎么做,要用多线程吗?
...全文
347 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
thirdlee 2006-02-18
  • 打赏
  • 举报
回复
加一句, 也不需要额外开线程,就再在接收线程里就可以再发送.
thirdlee 2006-02-18
  • 打赏
  • 举报
回复
socket是双工通信,建立连接后两端都是既可以发又可以收的.不需要额外再建socket连接.
pripor 2006-02-18
  • 打赏
  • 举报
回复
数据量不是很大的话用异步io即可
charles_y 2006-02-18
  • 打赏
  • 举报
回复
使用CSocket很简单,可以这样处理:
收和写:
1 收:
使用CSocket的OnReceive(),不需要自己开线程(当然实际上是使用了线程的),把收到的收据写到缓冲区中。
2 写:
把缓冲区的数据写到数据库中,这需要自己开一个新线程。

关键是要处理好缓冲区的同步。

读和发:使用一个线程即可,没有必要再使用缓冲区,使用发数据缓冲区的目的一般是为了防止发的速度跟不上读取数据的速度,但你这个程序根本没有必要,因为读取的数据源自己完全可以控制。所以可以读完就发,发完再读。

至于Socket,一个就行了,收和发不会互相干扰。当然也可以使用两个,这个不是关键。
Hylas 2006-02-18
  • 打赏
  • 举报
回复
这个问题应该与socket方式无关
Hylas 2006-02-18
  • 打赏
  • 举报
回复
多线程 + 队列

不难处理
axiang80 2006-02-17
  • 打赏
  • 举报
回复
to baodi_z(冷冷的太阳)
谢谢!
是的,服务器和客户端数据没有先后顺序的要求,只要求实时能发给彼此。服务器和客户端收到后入库。客户端收到信息后,不要应答,服务器收到后要应答。

一般开发这样的程序都是用winsock api来做,而不用CSock吗?不知有否跟我这项目类似的例程参考一下?
charles_y 2006-02-16
  • 打赏
  • 举报
回复
这样做应该没有问题,用缓冲区的话需要考虑一下读写的同步。
还有的就是数据库的同步问题,不过你既然读写的不是一个表,同步问题就不需要考虑了
zdleek 2006-02-16
  • 打赏
  • 举报
回复
服务器和客户端的数据有没有先后顺序的要求

如果没有就可以用两个连接,这样处理通信部分比较简单

多线程是必须的,否则那个效率肯定达不到应用的要求

对于客户端来说
至少要3个线程
一个收, 一写数据, 一个发
axiang80 2006-02-15
  • 打赏
  • 举报
回复
服务器: 从数据库中取数据放入发送缓冲,socket发送。
客户端:接受数据,写入接受缓冲区,一线程负责将缓冲数据写入数据库表中。一个线程从数据库另一张表中取数据放入发送缓冲区,socket发送。

问题是发送和接受之间的协调?是否有冲突?这样思路对吗?
charles_y 2006-02-15
  • 打赏
  • 举报
回复
一个socket就够了,用两个线程,一个收一个发
axiang80 2006-02-15
  • 打赏
  • 举报
回复
to alen_ghl(东方求*)
频繁,是指数据可能很多,紧接着发送。服务器不断从自己的数据库一张表中取数据发给客户端,这样客户端要不断的接受数据,而客户端取数据库中另一张表的数据,实时发给服务器端。会影响吗?
网络环境是专线,数据库中的表每条记示并不大。

对,socket不很了解。主要我的思路还不很清晰。
alen_ghl 2006-02-15
  • 打赏
  • 举报
回复
你说的很频繁能否具体点

如果数据量特别大可以用2个socket(还有网速怎么样?)
否则一个就可以搞定
axiang80 2006-02-15
  • 打赏
  • 举报
回复
to xx_jj()

异步io,能讲讲吗?或者给个例子?谢谢!
axiang80 2006-02-15
  • 打赏
  • 举报
回复
“服务器端会不断的发数据给客户端,客户端不仅要接受数据,写入数据库;还要不断的从另一张表中取出数据,不断的发给服务器端。”
服务器端发数据给客户端时,不要求回应,但很频繁。
客户端发数据给服务器端,很频繁,不要求回应。

再者,请说具体点。
xx_jj 2006-02-15
  • 打赏
  • 举报
回复
看你对数据实事性的要求了 一般要多线程
不过我以前做过一个用的异步io
joinclear 2006-02-15
  • 打赏
  • 举报
回复
可以再开个线程
striking 2006-02-15
  • 打赏
  • 举报
回复
一个socket应该可以, socket的每端每发送一次数据就接收一次数据.如果没有数据到达,就再次发送数据.

具体谁先发,谁先收你自己定就可以了

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧