这几天编一个点对点的传输程序,一个服务端,很多客户端,之间传输大量的图像数据,本来写好后感觉没有问题,可是测试的时候,总是报一些乱七八遭的错误,
最后发现一个小问题,在这里说出来,希望对用sock传输的哥们有点帮助:
Socket.SendBuf(SendBuf^, li_ESendSize),sendbuf是我定义的指针,在发出这个
命令后,不能立即FreeMem(sendbuf)释放sendbuf,因为这时有可能还没有将所有内容发出去,所以如果要将内存块发送出去,最好是将buf定义为公共变量,分配好内存,在sock的read事件中对用buf读要发送的内容,在sendbuf发送,等到程序退出时再去释放buf
我以前的程序
           ...
            GetMem(SendBuf, li_ESendSize);
            PRFS_SendFile.ReadBuffer(SendBuf^, li_ESendSize);
            Socket.SendBuf(SendBuf^, li_ESendSize);
            FreeMem(ls_SendBuf);
         ...
改后为

PRFS_SendFile.ReadBuffer(SendBuf^, li_ESendSize);
            Socket.SendBuf(SendBuf^, li_ESendSize);
将getmem放在了窗体打开的事件中
FreeMem(ls_SendBuf)放在close事件中。

什么是非阻塞方式?
一旦服务器与客户端建立了连接之后,就可以通过 Internet 传输数据和文件。但是在WinSock中存在两种传输模式“阻塞”和“非阻塞”的概念。

一般都采用非阻塞方式。在客户端,如果把 ClientType特性设置为ctNonBlocking,表示采用非阻塞方式进行连接。当服务器端 Socket试图进行读/写操作的时候,客户端 Socket就会得到通知,即OnRead或者OnWrite事件。

对于服务器端Socket来说,如果把ServerType特性设置为 StNonBlocking,表示采取非阻塞方式进行连接。当客户端 Socket试图进行读/写的时候,服务器端Socket就会得到通知,即OnClientRead或者OnClientWrite事件。

与非阻塞方式不同的是,在阻塞方式下没有诸如OnRead或者OnWrite等异步事件。Socket必须主动去读或者写数据。在读写操作完成之前,其他代码都无法执行,成为了纯粹的独占使用方式,整个应用程序将处于等待状态,大大降低应用程序的性能。

对于客户端Socket来说,如果把 ClientType特性设置为ctBlocking,表示采取阻塞方式进行连接,为了尽可能的减少阻塞方式的负面影响,可以把所有涉及到读写的操作放在一个单独的线程中,这样可以使其他的线程可以继续得到执行。

对于服务器端 Socket来说,如果把ServerType设置为stThreadBlocking,表示采取阻塞方式进行连接。Delphi 中将为每一个阻塞方式的连接自动分配一个新的线程,这样即使一个客户正在进行读写操作,其他的客户也不必等待

csdn中一篇sock 经验贴..相关推荐

  1. 如何使用CSDN中的Markdown写博客——纯小白篇

    这篇博客用来学习如何使用CSDN中的Markdown写博客 在写这篇博客前,我找了很多教程,摸索了很长时间才会用这东西写博客,现在写一个教程方便像我一样的纯小白学习如何用这个Makedown写博客. ...

  2. 1分钟学会在OneNote中插入代码块(不需要任何插件或软件直接插入像CSDN中一样的代码块)

    本文是众多使用技巧中其中的一篇, 全部使用技巧点击链接查看, 或直接查看本专栏其他文章, 保证你收获满满 我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题, 有兴趣的可以去 ...

  3. Android中插件开发篇总结和概述

    刚刚终于写完了插件开发的最后一篇文章,下面就来总结一下,关于Android中插件篇从去年的11月份就开始规划了,主要从三个方面去解读Android中插件开发原理.说白了,插件开发的原理就是:动态加载技 ...

  4. 幼儿园案例经验迁移_在建构区中如何将游戏经验迁移为知识经验

    在建构区中如何将游戏经验迁移为知识经验 潘 琼 龙艳娥 ( 贵州省榕江县县示范幼儿园, 贵州 榕江 557200) 摘 要: 随着教育的不断发展, 人们越来越重视学前教育.幼儿园教育也在不断地提升自身 ...

  5. 跨考计算机考研华科还是中科大,2018中科大计算机考研经验贴

    2018中科大计算机考研经验贴+注意事项 01关于择校 首先是选择学校,我由于想离家近,就最初选择了中国科学技术大学和华中科技大学作为备选,最终听说考研存在大小年,而华科17年分数相对较低,所以想着1 ...

  6. 22考研中科大计算机专业经验分享

    22考研中科大计算机专业经验分享 初试成绩+拟录取 个人情况介绍 初试经验分享 政治 英语 数学 408 其他一些建议 离学院出拟录取名单也有一段时间了,最近一直在忙着选导师的各种事情(外加play) ...

  7. CSDN的第一篇文章——聊聊股市

    没想到一个做光通信的渣渣开的CSDN账户第一篇文章竟然是关于股市的. 2021年新能源.军工.医疗.光伏.半导体可能是热门,在抖音上看了一些相关的东西,做个整理归纳 1. 选基金口诀 赵诣专攻新能源, ...

  8. 在CSDN的第一篇文章

    在CSDN的第一篇文章 关注CSDN,在这里找各种技术文章去看,已经很久了,而很密切的关注这里应该是从去年一月份开始吧,也就是从我实习开始.我是一个软件工程应届生,女滴,目前在小县城里的一家软件公司上 ...

  9. 中国科学技术大学 2014 计算机 复试方案,中科大2014复试经验 - 中国科学技术大学 - 王道论坛,专注于计算机考研的点点滴滴! - Powered by Discuz!...

    本帖最后由 Tsinghua_2013 于 2014-4-7 22:08 编辑 中科大2014复试经验 谨以此文献给在考研过程中给过我资料.经验.希望.力量的王道论坛,希望王道能越办越好.并希望此文能 ...

最新文章

  1. c#中ref与out的区别
  2. android中的显示跳转和隐式跳转
  3. elasticsearch term match multi_match区别
  4. DL之CNN:利用CNN(keras, CTC loss, {image_ocr})算法实现OCR光学字符识别
  5. Android使用PorterDuffXfermode实现遮罩效果
  6. 《Android开发精要》读书笔记——Android的系统架构
  7. WebStorm光标经常自动变为块状解决方案
  8. 桌面虚拟化之XenDesktop7
  9. 因为太难而被禁用的17道Google面试题
  10. Python基础090:解决jupyter notebook无法自动跳转chrome浏览器的问题
  11. Web渗透测试学习路线图
  12. 夏天第一图noob sky
  13. python获取当前星期几
  14. linux limits.conf 生效,limits.conf不生效问题
  15. 黑客入侵Wishbone窃取上万邮箱及手机号码
  16. JQueryUI自动补全 搜索提示实践
  17. 有一个好的身体太重要了
  18. typora导出word指定样式_Word长文档排版以写论文为例
  19. win10安装visio2010出错_为何我安装Visio 2010时会安装不上,提示下面的错误
  20. 泡菜 亚硝酸_不要相信泡菜

热门文章

  1. C++语言基础 —— 数组
  2. 再求f(x,n)(信息学奥赛一本通-T1167)
  3. Written English-书面-一般现在时
  4. 39 CO配置-控制-产品成本控制-成本对象控制-实际成本核算/物料分类帐-激活评估范围的物料分类账
  5. 33 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义每一工厂的差异码
  6. bigdecimal 除法保留两位小数_【名师课堂】苏教数学五年级上总复习9.4小数的四则计算...
  7. CPU 和 GPU频率设置
  8. Dataloader与Dataset
  9. 如何在JS判断是否为IE浏览器
  10. 属性面板 脚本_如何在组态王中实现同类型设备公用操作面板的调用---干货