对socket的不理解

1:UDP会丢失数据,而一般的小聊天程序似乎都用UDP,怎么不见丢失聊天中的某字?TCP需一直处监听状态会否很耗资源。如我要远程访问数据库,客户端得到服务端连接好的数据库... 1:UDP会丢失数据,而一般的小聊天程序似乎都用UDP,怎么不见丢失聊天中的某字?TCP需一直处监听状态会否很耗资源。如我要远程访问数据库,客户端得到服务端连接好的数据库所查询出的数据,该用哪种?
2:MFC封装CAsyncSocket类是异步(非阻塞)的,而用Socket Api可以写阻塞或者非阻塞的,多线程的阻塞效果是否可以等于单线程的非阻塞。单线程阻塞是否在有2个客户端连接时,服务端就不响应第2个连接?那单线程非阻塞在2个连接时呢?还是在有2个连接时,就一定需要有2个线程去处理?
3:一个客户端若在同一时间内向服务端发出好几条请求,比如,一个客户端先向服务端下载某文件,文件还没下完,它又向服务端发起另外请求(聊天,上传,数据传输之类的)。这是否需要服务端开另个线程去处理,或者客户端也需另开线程?上述情况可能在不同模式下,不同处理。烦请细说。
4:实际情况,我写好了个基于MFC和ACCESS的小程序,现想加入网络支持,可用客户端远程数据传输。我该选什么模式?
展开
 我来答
Alionkun
2011-09-16 · TA获得超过628个赞
知道小有建树答主
回答量:119
采纳率:0%
帮助的人:139万
展开全部
1、UDP会丢失数据,聊天程序之所以不会丢失数据,因为它们自己实现了确认、检错、重传机制,相当于模拟了TCP;查询数据库当然要用TCP。

2、异步机制是由操作系统提供的,效率较高;从数据接收的层面上看,多线程的阻塞差不多类似于单线程的非阻塞,但是这种实现方式比较有局限性。认真阅读关于socket的文档或者计算机网络,就不会有不理解的地方了。

3、绝大多数情况下,服务器和客户端都会使用新的工作线程来交换数据。这个看具体应用。你多做几个socket相关的项目就知道了。

4、所谓的模式是指UDP和TCP吗?当然是TCP。当时这并不是程序员所必须关心的,因为ACCESS的客户端驱动会处理一切网络传输事务,让你就像访问本地的ACCESS一样。做过项目了一般不会有这类疑惑。

any questions ?
追问
感谢至极!
第3个问题下:我若采用单线程非阻塞,即用CAsyncSocket类编写的客户端和服务端能否应付的过来?似乎多线程太麻烦,我没写过多线程.
第4个问题下:我不打算让客户端直接接触access,就是不用ado直接连到服务端的数据库。而是给服务端发送sql指令,通过服务端响应。不像如你所说的“让ACCESS的客户端驱动会处理一切网络传输事务”让可行吗?
追答
关于多线程编程和网络编程,可以参考windows程序设计等书籍。
关于第四个问题,按照你的思路,即不利用ADO之类的数据库驱动,那在服务器就要写一个服务程序S,当收到客户C的sql指令时,S通过访问ACCESS执行sql命令,然后再将结果返回给C。
相当于模拟ADO。这个要看具体应用了,也有不少网络程序也采用这种模型,如网游,难度不小
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式