社区
网络编程
帖子详情
请问在阻塞模式下使用sendto会不会阻塞,在什么情况下阻塞和如何避免?
chengwei_xj
2003-09-15 11:33:58
还有,如果会阻塞,是不是意味着在阻塞模式下,每一个sendto操作都应该放在一个发送线程中去?
...全文
258
6
打赏
收藏
请问在阻塞模式下使用sendto会不会阻塞,在什么情况下阻塞和如何避免?
还有,如果会阻塞,是不是意味着在阻塞模式下,每一个sendto操作都应该放在一个发送线程中去?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chengwei_xj
2003-12-02
打赏
举报
回复
谢谢大家
chengwei_xj
2003-09-16
打赏
举报
回复
up
chengwei_xj
2003-09-15
打赏
举报
回复
sendto在什么情况下阻塞呢?
ypos
2003-09-15
打赏
举报
回复
sendto就算阻塞也应该不会阻塞很久,因为只是发送出去
gzshd
2003-09-15
打赏
举报
回复
如果在阻塞模式下就可以不在线程里sendto了,阻塞模式下,当程序执行到sendto时,该线程就停住,等sendto函数完成返回后,再向下运行,而非阻塞模式就不等sendto,而接着向下运行
howtotell
2003-09-15
打赏
举报
回复
不会吧。
Linux的socket编程详解
创建准备阶段 服务器或客户端:
使用
gethostbyname() 来通过域名获取 IP 地址和端口 服务器: 创建 Socket 服务器:
使用
bind() 将套接字与特定的 IP 地址和端口绑定 客户端: 创建 Socket 连接阶段(UDP 不需要建立连接) 服务器:
使用
listen() 进入监听状态 服务器:
使用
accpet() 接收客服端的请求,返回客户端 Socket。(如无请求,
会
阻塞
程序进行等待) 客户端:
使用
connect() 建立连接,并获得服务器 Socket。 数据交互阶段 服务器或客户端:
使用
wirte() 对对方 Socket 进行数据写入。 服务器或客户端:
使用
read() 对对方 Socket 进行数据读取。 UDP
情况
下
使用
send
to() 发送数据。 UDP
情况
下
使用
recvfrom() 接收数据。 关闭阶段 服务器或客户端:
使用
close() 关闭套接字 服务器或客户端:
使用
shutdow() 关闭连接(但
不
会
关闭套接字)
MFC网络编程之自制浏览器
网络编程,当然要用到Windows Socket(套接字)技术。Socket相关的操作由一系列API函数来完成,比如socket、bind、listen、connect、accept、
send
、
send
to、recv、recvfrom等。调用这些API函数有一定的先后次序,有些函数的参数还比较复杂,对于开发者来说,不是很好用。于是,微软的MFC提供了两个类:CAsyncSocket和CSocket,极大地方便了Socket功能的
使用
。 CAsyncSocket类在较低层次上封装了Windows Socket API,并且通过内建一个(隐藏的)窗口,实现了适合Windows应用的异步机制(Windows Socket API默认
情况
下工作在
阻塞
模式
,不方便直接在消息驱动的Windows程序上
使用
)。CSocket类从CAsyncSocket类派生,进一步简化了Socket功能的应用。不过很遗憾,正因为这两个类都内建了一个窗口,它们并不是线程安全的(thread-safe);如果要在多线程环境下应用Socket功能,建议自行封装Socket API函数。 基于TCP的socket编程的服务器端程序流程如下: 1、创建套接字 2、将套接字绑定到一个本地地址和端口号上(bind) 3、将套接字设为监听
模式
,准备接受客户请求(listen) 4、等待客户请求,请求到来时接受请求,建立链接,并返回 一个新的基于此次通信的套接字(accept) 5、用返回的套接字和客户端进行通信(
send
、recv) 6、返回,等待另一客户请求 7、关闭套接字 基于TCP的socket编程的客户端程序流程如下: 1、创建套接字 2、向服务器端发送请求(connect) 3、和服务器端进行通信(
send
、recv) 4、关闭套接字 基于UDP的socket编程的服务器端程序流程如下: 1、创建套接字 2、将套接字绑定到本地地址和端口号上(bind) 3、等待接收数据(recvfrom) 4、关闭套接字 基于UDP的socket编程的客户端程序流程如下: 1、创建套接字 2、和服务器端进行通信(
send
to) 3、关闭套接字 异步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而同步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式。
阻塞
套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直
阻塞
在此网络调用上,比如调用recv()函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在recv()这个函数调用上,直到读到一些数据,此函数调用才返回;而非
阻塞
套接字是指执行此套接字的网络调用时,不管是否执行成功,都立即返回。比如调用recv()函数读取网络缓冲区中数据,不管是否读到数据都立即返回,而
不
会
一直挂在此函数调用上。在实际Windows网络通信软件开发中,异步非
阻塞
套接字是用的最多的。平常所说的C/S(客户端/服务器)结构的软件就是异步非
阻塞
模式
的。 对于这些概念,初学者的理解也许只能似是而非,我将用一个最简单的例子说明异步非
阻塞
Socket的基本原理和工作机制。目的是让初学者不仅对Socket异步非
阻塞
的概念有个非常透彻的理解,而且也给他们提供一个用Socket开发网络通信应用程序的快速入门方法。操作系统是Windows 98(或NT4.0),开发工具是Visual C++6.0。 MFC提供了一个异步类CAsyncSocket,它封装了异步、非
阻塞
Socket的基本功能,用它做常用的网络通信软件很方便。但它屏蔽了Socket的异步、非
阻塞
等概念,开发人员无需了解异步、非
阻塞
Socket的原理和工作机制。因此,建议初学者学习编网络通信程序时,暂且不要用MFC提供的类,而先用Winsock2 API,这样有助于对异步、非
阻塞
Socket编程机制的理解。
VC++网络通讯课程设计
利用MFC为开发工具在多个I/O端点之间实现多对多的通信。通过MFC中CAsyncSocket类把复杂的WinSock API函数封装到类里,MFC给出了CSocket类,这个类是由CAsyncSocket类继承下来的,它提供了比CAsyncSocket更高层的WinSock API接口。CSocket对象提供
阻塞
模式
,
阻塞
函数(如Receive()、
Send
()、ReceiveFrom()、
Send
To() 和Accept())直到操作完成后才返回控制权。
c语言socket编程指南
最基本最简单的入门概念级教程 适合初学者 目录: 1) 什么是套接字? 2) Internet 套接字的两种类型 3) 网络理论 4) 结构体 5) 本机转换 6) IP 地址和如何处理它们 7) socket()函数 8) bind()函数 9) connect()函数 10) listen()函数 11) accept()函数 12)
send
()和recv()函数 13)
send
to()和recvfrom()函数 14) close()和shutdown()函数 15) getpeername()函数 16) gethostname()函数 17) 域名服务(DNS) 18) 客户-服务器背景知识 19) 简单的服务器 20) 简单的客户端 21) 数据报套接字Socket 22)
阻塞
23) select()--多路同步I/O
Linux-socket编程指南
1) 什么是套接字? 2) Internet 套接字的两种类型 3) 网络理论 4) 结构体 5) 本机转换 6) IP 地址和如何处理它们 7) socket()函数 8) bind()函数 9) connect()函数 10) listen()函数 11) accept()函数 12)
send
()和recv()函数 13)
send
to()和recvfrom()函数 14) close()和shutdown()函数 15) getpeername()函数 16) gethostname()函数 17) 域名服务(DNS) 18) 客户-服务器背景知识 19) 简单的服务器 20) 简单的客户端 21) 数据报套接字Socket 22)
阻塞
23) select()--多路同步I/O 24) 参考资料
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章