社区
网络编程
帖子详情
在一辅助线程中,CSocket ::Accept()已经进入阻塞,现在要停止关闭这个端口,怎么做?
crazyingmouse
2003-08-30 01:31:11
在一辅助线程中,CSocket ::Accept()已经进入阻塞,现在要停止关闭这个端口,怎么做?
...全文
255
10
打赏
收藏
在一辅助线程中,CSocket ::Accept()已经进入阻塞,现在要停止关闭这个端口,怎么做?
在一辅助线程中,CSocket ::Accept()已经进入阻塞,现在要停止关闭这个端口,怎么做?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Oversense
2003-08-31
打赏
举报
回复
直接closesocket(监听的sock);
就ok
taolei
2003-08-31
打赏
举报
回复
ghz:
在其它线程中关闭这个套接字当然没问题,否则那阻塞的socket岂不是都不能正常关闭了。
wglacier
2003-08-31
打赏
举报
回复
1、smch(Ashes Of Time)说的可行,假如你的m_bStop变量为true,就建立一个套接字和自己连,就可以跳出Accept函数,然后你判断,如果m_bStop成立,就退出
CSocket sock;
...
while(sock.Accept(..))
{
if(m_bStop) break;
//接收该连接
}
2、在其它线程中关闭这个套接字应该也行,不过不知道有没有问题 closesocket(hSock);
caomuyong1
2003-08-31
打赏
举报
回复
兄弟,WSACleanup应该可以吧,
不然后Close吧
taolei
2003-08-31
打赏
举报
回复
在其他的线程中close这个socket,close后Accept自然也会退出并返回错误。
crazyingmouse
2003-08-31
打赏
举报
回复
TO smch(Ashes Of Time)
没明白你的意思,我在辅助线程中已经阻塞了,再去开一个线程自连? 然后根据全局变量判断是否再开一个Csocket? 那我程序不是一直在不听地开关端口了?
To wwwllg(wwwllg)
这个方法我试过,结果是client还是能连得上,而且没有错误信息。数据都不知道去哪里了。
to wangjidh(背土蚂蚁)
我线程已经accept阻塞了,怎么在下面跟关闭方法? 譬如我有一全局变量 m_bool,哪怕一button,我希望m_bool或者button一按下去,立刻把这个端口关闭掉。
我本来想把这个线程强制terminate掉,然后把Csocket delete掉,但发现不行,端口还是能
连得上,但数据知道传到哪里去了,可怕的是连没有错误信息了。
client 那边csocket.connect返回的是连接正常。
wangjidh
2003-08-30
打赏
举报
回复
if(!g_sListen.Accept(sConnect,saClient))
…………………………
关闭办法
g_sListen.Close();
Sleep(300); //等待线程结束
WSACleanup();
windows_editor
2003-08-30
打赏
举报
回复
gz
UDX协议
2003-08-30
打赏
举报
回复
一个不好的方法是,在外面delete掉这个csock对象。
smch
2003-08-30
打赏
举报
回复
设置一个全局变量g_bStop,在程序中再建立一个socket,自己连接自己,然后判断g_bStop决定是否退出还是接收数据啊。
MFC网络编程之自制浏览器
网络编程,当然要用到Windows
Socket
(套接字)技术。
Socket
相关的操作由一系列API函数来完成,比如
socket
、bind、listen、connect、
accept
、send、sendto、recv、recvfrom等。调用这些API函数有一定的先后次序,有些函数的参数还比较复杂,对于开发者来说,不是很好用。于是,微软的MFC提供了两个类:CAsync
Socket
和C
Socket
,极大地方便了
Socket
功能的使用。 CAsync
Socket
类在较低层次上封装了Windows
Socket
API,并且通过内建一个(隐藏的)窗口,实现了适合Windows应用的异步机制(Windows
Socket
API默认情况下工作在
阻塞
模式,不方便直接在消息驱动的Windows程序上使用)。C
Socket
类从CAsync
Socket
类派生,进一步简化了
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、和服务器端进行通信(sendto) 3、
关闭
套接字 异步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而同步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式。
阻塞
套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直
阻塞
在此网络调用上,比如调用recv()函数读取网络缓冲区
中
的数据,如果没有数据到达,将一直挂在recv()这个函数调用上,直到读到一些数据,此函数调用才返回;而非
阻塞
套接字是指执行此套接字的网络调用时,不管是否执行成功,都立即返回。比如调用recv()函数读取网络缓冲区
中
数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在实际Windows网络通信软件开发
中
,异步非
阻塞
套接字是用的最多的。平常所说的C/S(客户端/服务器)结构的软件就是异步非
阻塞
模式的。 对于这些概念,初学者的理解也许只能似是而非,我将用一个最简单的例子说明异步非
阻塞
Socket
的基本原理和工作机制。目的是让初学者不仅对
Socket
异步非
阻塞
的概念有个非常透彻的理解,而且也给他们提供一个用
Socket
开发网络通信应用程序的快速入门方法。操作系统是Windows 98(或NT4.0),开发工具是Visual C++6.0。 MFC提供了一个异步类CAsync
Socket
,它封装了异步、非
阻塞
Socket
的基本功能,用它
做
常用的网络通信软件很方便。但它屏蔽了
Socket
的异步、非
阻塞
等概念,开发人员无需了解异步、非
阻塞
Socket
的原理和工作机制。因此,建议初学者学习编网络通信程序时,暂且不要用MFC提供的类,而先用Winsock2 API,这样有助于对异步、非
阻塞
Socket
编程机制的理解。
MFC下C
Socket
编程详解(C
Socket
多
线程
)
MFC下C
Socket
编程详解(C
Socket
多
线程
) 发表于 2014年04月11日 发表评论 • 分享到... MFC下C
Socket
编程详解: 1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN): C
Socket
::Create 初始化(一般写服务器程序都不要用为好,用下面的 C
Socket
::
Socket
初始化)C
Socket
::
Socket
初始化CS
MFC下C
Socket
编程详解
原文地址:http://blog.csdn.net/yejiansnake/article/details/2175778 MFC下C
Socket
编程详解: 1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN): C
Socket
::Create 初始化(一般写服务器程序都不要用为好,用下面的 C
Socket
::
Socket
初始化) C
转帖 MFC C
Socket
编程
MFC下C
Socket
编程详解:
1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN):
C
Socket
::Create 初始化(一般写服务器程序都不要用为好,用下面的 C
Socket
::
Socket
初始化)
C
Socket
::
Socket
初始化
C
Socket
::SetSockOpt 设置
socket
选项
C
Socket
::Bind 绑定地址
端口
C
Socket
::Connect 连
关于
socket
的
Accept
阻塞
模式的退出方法分析
众所周知,
socket
的
Accept
会当前
线程
。如果子程序,或者类在被回收时,没有正确的
中
止
socket
,则会引发一些异常。 我说一下常用的一些方法: 1.强行
中
断
线程
。 这种方法我觉得是最差的,因为强行
中
断正在执行的
线程
,可能会引发一些意想不到的结果,这是最差的方法。 2.在
Socket
上调用Pending()方法。 这种
做
法的原理就是: a.看Sock
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章