同步阻塞SOCKET通信中处理交互的问题

vivanboy 2005-12-14 04:18:25
初学winsocket TCP编程,遇到以下疑问:
当建立socket会话后(SOCKET_STAEAM),服务器端接受完client的请求流会始终阻塞在这里:
sockRecvR = recv(sockTmpDoRequest, szBuff, sysSocketBuffer, 0);
客户端也在等待服务器端处理的响应结果,因此也无法closesocket,这样两方进程都在recv处阻塞,如何解决这种阻塞情况?

还有:
1.同步阻塞和异步非阻塞方式各自一般都在什么应用情况中使用?请解释一下原理
2.当client发送过来的流大小不能确定,而服务器又必须把所有接受流拼接在一起后才能处理时,如何动态增加存储内存,以防止浪费内存的现象

...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
freemme 2005-12-15
  • 打赏
  • 举报
回复
0. sockRecvR= recv(sockTmpDoRequest, szBuff, sysSocketBuffer, 0);
------------------------
客户端有数据发送过来,则函数就可以返回

1. 同步阻塞一般在客户端使用,因为客户端只是处理少量连接,用同步阻塞编码比较简单
异步非阻塞方式一般用在服务器端,因为服务器需要处理大量连接,效率很重要
2. 要合并数据,你需要知道数据的边界(即数据大小),这样你就可以用动态分配内存(如new等)
jingtan 2005-12-15
  • 打赏
  • 举报
回复
可以用string vector等现成的容器来保存数据,很方便的
vivanboy 2005-12-15
  • 打赏
  • 举报
回复
up
oyljerry 2005-12-15
  • 打赏
  • 举报
回复
1,用非阻塞,有了数据来了,才处理,没有,你可以继续自己的处理
还可以设置超时等来返回
2,可以通过堆来对应的分配空间
nuaawenlin 2005-12-15
  • 打赏
  • 举报
回复
可以采用非阻塞模型解决

可以设置RECTIME解决等待数据的时间

18,356

社区成员

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

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