完成端口如何优雅地关闭socket [问题点数:90分,结帖人y66721986]

Bbs1
本版专家分:80
结帖率 91.67%
Bbs6
本版专家分:6904
Bbs12
本版专家分:361615
版主
Blank
名人 2013年 荣获名人称号
Blank
探花 2011年 总版技术专家分年内排行榜第三
2010年 总版技术专家分年内排行榜第三
Blank
进士 2012年 总版技术专家分年内排行榜第五
Blank
金牌 2012年1月 总版技术专家分月排行榜第一
Bbs9
本版专家分:87220
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
Bbs7
本版专家分:24519
Blank
黄花 2015年12月 VC/MFC大版内专家分月排行榜第二
2015年10月 VC/MFC大版内专家分月排行榜第二
Bbs1
本版专家分:80
Bbs1
本版专家分:80
Bbs1
本版专家分:80
如何关闭完成端口
使用CreateIoCompletionPort创建<em>完成</em><em>端口</em>,当服务<em>完成</em>后,如何<em>关闭</em>这个<em>完成</em><em>端口</em>
关于完成端口socket关闭问题
正在学<em>完成</em><em>端口</em>,教程中的一个例子发现有点问题:rn if (GetQueuedCompletionStatus(CompletionPort, &BytesTransferred,rn (LPDWORD)&PerHandleData, (LPOVERLAPPED *) &PerIoData, INFINITE) == 0)rn rn printf("GetQueuedCompletionStatus failed with error %d\n", GetLastError());rn return 0;rn rn if (BytesTransferred == 0)rn rn printf("Closing <em>socket</em> %d\n", PerHandleData->Socket);rnrn if (close<em>socket</em>(PerHandleData->Socket) == SOCKET_ERROR)rn rn printf("close<em>socket</em>() failed with error %d\n", WSAGetLastError());rn return 0;rn rnrn GlobalFree(PerHandleData);rn GlobalFree(PerIoData);rn continue;rn rn在工作线程中先用GetQueuedCompletionStatus等待,当BytesTransferred == 0成立时<em>关闭</em><em>socket</em>,但是我发现,当客户程序<em>关闭</em><em>socket</em>或退出时,GetQueuedCompletionStatus的返回值为0,这样就不会执行<em>关闭</em>服务器侧<em>socket</em>的代码了。rnrn那么如何才能确保服务程序中的<em>socket</em>一定会<em>关闭</em>呢?
完成端口得到socket关闭的通知
在客户端建立连接后,服务器端用iocp进行网络事件监听。rn当服务器端主动<em>关闭</em>这个连接后,GetQueuedCompletionStatus()返回值0,rn接收到的字节数也为0,这表明这个<em>socket</em><em>关闭</em>,用GetLastError()得到64。rn如果客户端主动<em>关闭</em>,服务器端接收到后返回值1,接收到的字节数也为0,GetLastError()得到0。rnrn是不是主动<em>关闭</em>和被动<em>关闭</em>有一样?rnrn可我用以前也是测试<em>完成</em><em>端口</em>的一个程序测试了一下,好像主动<em>关闭</em>和被动<em>关闭</em>返回的都一样的啊!rnGetQueuedcompleitonStatus()返回值都为0,GetLastError()返回 64.rn不知道为什么这样呢?rn
Delphi Socket 实现编程(6)
TClientSocket和TServerSocket的数据通知使用了Windwos下的消息通知机制,造成它们只适合针对窗口的WinForm程序,因为可以得到窗口的Handle句柄,用来postmessage或者sendmessage,但对于Dll这样的不存在窗口的工程就不适应了,我做了测试:       在DLL工程中引入TClientSocket,设置HostIP,HostPort后,Act
线程关闭socket 问题(急)
-
优雅关闭socket
http://blog.sina.com.cn/s/blog_4dbcd2730100v5cu.html转载于以上网址我们在利用IOCP(<em>完成</em><em>端口</em>)进行程序设计的时候,经常要<em>关闭</em>一些不满足条件的套接字。假如我们直接采用close<em>socket</em>方法进行<em>关闭</em>的话,绑定到IO<em>端口</em>的此套接字的未发送的数据就会丢失,这种情况是我们不愿意发生的。下面介绍一种合理<em>关闭</em>此套接字的方法: 首先,利用setsockop...
IOCP如何正确关闭socket
我服务端是IOCP模型的 当我想<em>关闭</em>客户端的链接时候直接使用colse<em>socket</em>进行<em>关闭</em> 有时候进到 GetQueuedCompletionStatus中 有时候不进来啊, 怎么才能正确<em>关闭</em>啊 我还
ClientWebSocket连接后,如何优雅关闭
ClientWebSocket 客户端 = new ClientWebSocket(); bool 开关 = true; async void 启动() { await 主客户端.ConnectAsy
下面就是优雅关闭
下面就是<em>优雅</em><em>关闭</em>: Runtime.getRuntime().addShutdownHook(new Thread(“mps-hook”) { @Override public void run() { cleanUp();} });
java程序优雅关闭
数据接收程序实现<em>优雅</em><em>关闭</em>,主要是当服务需要更新时,不强制kill掉进程,而是将队列中的数据都消费完再关掉进程。 其中队列中的数据总是源源不断的被put进来,首先需要解决的是不再接收新的数据。 所以想实现程序<em>优雅</em><em>关闭</em>,需要执行的步骤如下: 1. 断开与代理服务器的连接 2. 查询队列中的数据大小 3. 当队列中无数据时,程序退出 程序代码: package com.example.s...
Prometheus 的优雅关闭姿势
最近在看 Prometheus 的源代码,发现它自带了<em>优雅</em>的<em>关闭</em>方式,这和我以前博文讲到的热更新十分相似。 如何<em>优雅</em><em>关闭</em> 使用 kill 命令 因为 Prometheus 是一个 Unix 二进制程序,我们可以向 Prometheus 进程发送 SIGTERM<em>关闭</em>信号。 使用pgrep-f prometheus找到运行的 Prometheus 进程号 使用kill...
Java进程优雅关闭
目的: Java进程在接受到<em>关闭</em>命令时,可能正在进行业务处理,需要等正在处理的业务执行完毕后,进程才能退出,以便保证业务处理的完整性。 方案1:       1 在主线程中注册<em>关闭</em>钩子。          在<em>关闭</em>钩子中,设置标示不能处理新的业务(如<em>关闭</em>mq的消费者,<em>关闭</em>tcp连接的监听<em>端口</em>等)。          循环等待业务流程的处理完毕。(或者在<em>关闭</em>钩子中睡眠一段时间)      2
jvm优雅关闭
jvm<em>优雅</em><em>关闭</em>: Runtime.getRuntime().addShutdownHook() 钩子线程程在程序退出的前被执行(kill -9强制退出除外); 钩子线程里只处理善后,目标是尽可能快的退出且不保证有脏数据。如果钩子线程里做过多事情,或者发生阻塞,那么可能出现kill失效,程序不能退出的情况,这是需要强制退出 参考: http://www.cnblogs.com/baib
boost::asio 连接管理11 如何关闭连接
在实际产品运行中,对连接管理有了更新的认识,这里分享一下。shared_ptr管理连接对象的生命周期shared_ptr的引用计数器决定了连接对象的生命周期。这里我说的连接对象就是在我的前文:http://blog.csdn.net/csfreebird/article/details/8522620中的Client对象:#include "core/connection.h" #include
Socket编程中的强制关闭优雅关闭及相关socket选项
以下描述主要是针对windows平台下的TCP <em>socket</em>而言。首先需要区分一下<em>关闭</em><em>socket</em>和<em>关闭</em>TCP连接的区别,<em>关闭</em>TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包(FIN,RST等),具体的交换过程可以看TCP协议,这里不详细描述了。而<em>关闭</em><em>socket</em>是指<em>关闭</em>用户应用程序中的<em>socket</em>句柄,释放相关资源。但是当用户<em>关闭</em><em>socket</em>句柄时会隐含的触发TCP连接的<em>关闭</em>过程。TCP连接的<em>关闭</em>过程有两种,一种是<em>优雅</em><em>关闭</em>(gracef
如何优雅关闭一个socket
    最近在windows编程时需要考虑到“如何<em>优雅</em>地<em>关闭</em>一个<em>socket</em>”,查阅了一些资料,现将查到的相关资料做个汇编,希望能对后来者有所帮助(比较懒,所以英文资料没有翻译:-)) 1. <em>关闭</em>Socket时究竟做了什么     <em>关闭</em><em>socket</em>分为主动<em>关闭</em>
Spring优雅关闭之:ShutDownHook
前言: 又是一个之前没关注过的课题,发现学习Spring官方文档还是有用的,一个个的知识点不断冒出来。 意外的发现朱小厮https://blog.csdn.net/u013256816/大神也是CSDN重度患者,哈哈,向大神学习,好好写博客,应该有一天也可以出书的吧。 闲话不多说了,先提出一个问题,什么叫做<em>优雅</em><em>关闭</em>? 我们的java程序运行在JVM上...
优雅关闭SpringBoot
开启Actuator spring-boot-actuator模块提供Spring Boot所有的production-ready特性,启用该特性的最简单方式是添加spring-boot-starter-actuator‘Starter’依赖。 按以下配置为Maven项目添加执行器: &lt;dependency&gt; &lt;groupId&gt;org.springfra...
socket完成端口模型问题
我接到一个紧急的任务,需要利用<em>socket</em>的<em>完成</em><em>端口</em>模型来实现网络通信rn请问谁对这方面熟呀!给我讲一下实现通信的流程,rn最好是有源代码!
关于Socket的完成端口模型
在编程中用CreateIoCompletionPort来注册要连接的Socket,当有多个连接申请时,就必须多次来调用这个函数来注册,然后用WSARecv来接受数据。当 GetQueuedCompletionStatus来得到得到<em>完成</em>的状态,然后就可以接受到数据,是这样的吗?连接断开的时候是怎样解除连接的?怎样知道是那个Socket发送过来的数据呢?接受到的数据放在那里了,为什么放在那里?谁有详细的资料或者例子发给我一份,谢谢。rnshicheng521@163.com
windows socket IO完成端口
今天用IO<em>完成</em><em>端口</em>模型弄了个客户端和服务器端,在客户端用了个循环连续给服务器端发信息,发现服务器端会接受混乱,把好几条信息当成一条接收,而不是想想中的:监听线程接收到一条信息,存入队列,工作线程依次从队列中取信息进行处理。但是我看了网上别人写的博客,IO<em>完成</em><em>端口</em>好像很强大的样子。那位高手用IO<em>完成</em><em>端口</em>模型,求指点,分数不多了,见谅
优雅关闭socket的方法:SO_LINGER
<em>优雅</em><em>关闭</em><em>socket</em>的方法:SO_LINGER
14.优雅关闭socket的方法:SO_LINGER
这个参数对应大量短链接的服务器很有必要!   shutdown(fd, SHUT_RDWR); struct linger linger; linger.l_onoff = 1; linger.l_linger = 0; setsockopt(fd, SOL_SOCKET, SO_LINGER, (char *) &amp;amp;linger, siz...
紧急求助!关于socket优雅关闭问题?
先看一段代码: MyHandler(SOCKET hSocket) { waitChar(hSocket,'\0x11'); SendFile(hSocket,"C:\\a.dat") shutdow
iocp 关闭
http://blog.csdn.net/simbi/article/details/3738933 http://www.cnblogs.com/BeginGame/archive/2011/09/22/2185164.html 及时监测连接被动<em>关闭</em>        除非有特别要求,否则你应该总是对每个连接保持一个挂起的接收pending io (使用WSARecv投递)。
完成端口socket 的一些疑惑
写过一个C/S的东西,但是总是感觉不好使,而且对于多用户同时连接的负载很不放心rnrn于是查资料,才知道有<em>完成</em><em>端口</em>一说=。=rnrn我的C/S的Server端是这么设计的rnrn1。创建<em>socket</em>,listenrnrn2。创建while(true)线程,Accept C端的connect请求rnrn3。每收到一个连接请求,创建一个线程,while(true),recv去接收信息rnrn4。recv到信息后,创建线程处理,rnrnS端的运行没有问题,但是,每个连接并开始处理的客户会创建两个线程,使用PE看S端的进程,如同蛛网。。。rnrn去看<em>完成</em><em>端口</em>的介绍,貌似只有创建<em>完成</em><em>端口</em>和处理信息,而且所创建的线程也只有两三条,是不是所有的工作都交给WINDOWS去处理了?rnrn菜鸟求教。。。
SOCKET 和完成端口模型PPT
SOCKET 方面的文档方面的资料,供大家参考。
c# socket 完成端口实例
SocketAsyncEventArgs 类是一组增强功能的一部分 System.Net.Sockets.Socket 提供了可供专用的高性能套接字应用程序的替代异步模式的类。 此类被专为需要高性能的网络服务器应用程序。 应用程序可以以独占方式使用增强的异步模式,或仅仅在目标 (例如,在接收大量数据时) 的热区域。 这些增强功能的主要功能是可以避免重复分配的和在大量异步套接字 I/O 内进行同步的对象。 当前实现的 Begin/End 设计模式 System.Net.Sockets.Socket 类需要 System.IAsyncResult 对于每个异步套接字操作分配对象。 在新 System.Net.Sockets.Socket 类增强功能,异步套接字操作进行了描述可重用通过 SocketAsyncEventArgs 对象分配和维护的应用程序。 高性能套接字应用程序非常清楚地知道必须保持的重叠的套接字操作的数量。 应用程序可以创建尽可能多的 SocketAsyncEventArgs 其所需的对象。 例如,如果服务器应用程序需要具有 15 套接字接受未<em>完成</em>的操作将在任何时候,以支持传入客户端连接速率,它可以分配 15 个可重用 SocketAsyncEventArgs 实现此目的的对象。
socket 完成端口 Accept?
4核CPU,创建了4个并发<em>完成</em><em>端口</em>,创建了8个服务线程处理数据。rnrn那么,创建几个Accept线程用来接收套接字最为合适呢.rnrn小弟刚接触套接字,不太清楚。
SOCKET 与 完成端口的关系疑问.
这几天在看<em>完成</em><em>端口</em>,有几个点不太明白,望高手指教:rn1 <em>完成</em><em>端口</em>IOCP是个通知队列,有"事"发生就会唤醒一个工作线程来解决之.IOCP不是专门为SOCKET设计的,那IOCP怎么知道发生的"事"与SOCKET的对应关系呢?也就是说:IOCP怎么知道挂在其上的SOCKET发生了什么事呢?(数据出 ? 数据入 ? ACCEPT连接?)rn 我的理解:IOCP 和SOCKET 都是基于通用的IO模型,因此数据出/数据入是用相同的方式描述的,所以IOCP能把正确的事告诉上层.不知对否? 但另一个疑问:ACCEPT事件(或者CONNECT事件)属于SOCKET专有的,IOCP不可能区分吧?而我看到很多资料说,IOCP也能把这两种事件的<em>完成</em>通报给上层,这是瞎说的还是什么的?rn IOCP把事件通报上层时,事件类型是由 OVERLAPPED 这么个东西里的成员来确定的.我想知道,IOCP是如何区分 "不同的IO类型"的IO事件的(文件/SOCKET...),从而给OVERLAPPED里的成员标上正确的值.rn 谢谢!
基于SOCKET的完成端口示例
基于SOCKET的<em>完成</em><em>端口</em>示例,可以查看我对<em>完成</em><em>端口</em>介绍的博文:http://blog.csdn.net/drecik__/article/details/8186961
socket完成端口例子
这是个自己写的<em>完成</em><em>端口</em>SOCKET例子,协议使用TCP协议
socket工程文件完成端口版本
<em>socket</em>通信的客户端和服务器端的工程程序,基于<em>完成</em><em>端口</em>技术,实现了多个客户端向服务器端持续发送数据
如何强行关闭socket
多个客户端连接到服务器,如何强行<em>关闭</em>服务器端创建的某一个<em>socket</em>?
如何关闭socket连接
用的是tcp连接,但是不知道为什么推出的时候总有线程没有退出来rn代码是这样的rn线程内的代码rnIPEndPoint topip = new IPEndPoint(IPAddress.Parse("192.168.8.22"), 8000);rn Socket top<em>socket</em> = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);rn top<em>socket</em>.Bind(topip);rn top<em>socket</em>.Listen(10);rn while (cut == 1)rn rn top<em>socket</em>.Accept();rn 下面都是处理代码rn rn rn top<em>socket</em>.Shutdown(SocketShutdown.Both);rn top<em>socket</em>.Close();
如何关闭Socket
开启Socket的方法为rn[code=C#] rn//CS为 CreatSocket()函数所在的类的对象 rnprivate void btn_Creat_Click(object sender, EventArgs e)rn rn tryrn rn Thread t = new Thread(cs.CreatSocket);rn t.Start();rn tb_ChatNote.Text += "游戏已建立,等待连接……\r\n";rn myColor = 1;rn rn catchrn rn rn rn //创建<em>端口</em>rn public void CreatSocket()rn rn creatNew = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);rn acceptSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);rn creatNew.Bind(source);rn creatNew.Listen(5);rn acceptSocket = creatNew.Accept();rn t = new Thread(Process);rn t.Start();rn rn private void Process()rn rn tryrn rn while (acceptSocket != null && acceptSocket.Connected)rn rn byte[] buffer = new byte[1024];rn acceptSocket.Receive(buffer);rn if (received != null)rn rn received(Encoding.Default.GetString(buffer));rn rn rn rn catchrn rn rn rn[/code]rn<em>关闭</em>函数如下,但是不能成功rn[code=C#]rn private void btn_Close_Click(object sender, EventArgs e)rn rn tryrn rn cs.CloseConnect();rn rn catchrn rn rn rn //断开连接rn public void CloseConnect()rn rnrn tryrn rn creatNew.Close();rn acceptSocket.Close();rn rn rn rn catchrn rn rn rn[/code]rn rnrnrn请问应如何<em>关闭</em>.
如何完全关闭socket
例:rn SOCKET sock=<em>socket</em>(AF_INET,SOCK_STREAM,0);rn SOCKADDR_IN sa; rn sa.sin_family=AF_INET;rn sa.sin_port=htons(3001);rn sa.sin_addr.S_un.S_addr=inet_addr("191.24.10.11");rn rn bind(sock,(struct sockaddr *)&sa,sizeof(SOCKADDR_IN));rnrn //...... 略rn rn closesock(sock);rnrn如果我把这个程序第一次执行,可正常运行,但是如果再运行一次,则在绑定时发生错误,系统说此IP地址不能重得使用。rn rn 我试了很多的方法,结果只有关机重启才行。呵呵,不过,这不能叫办法。希望有哪位高手指点一二。谢谢rn rnrn
Android如何关闭Socket?
SocketChanel,好像官方有说明,哪个版本有Bug,执行close后,连接还在,除非收发数据,才会报异常,否则连接一种摆在那。rnrn最后官方说明建议用Socket,不要用SocketChanel。rnrn但是,实测不但提到的那个JavaJDK版本有问题,之后的也有问题,不大SocketChanel这样,Socket也这样。rnrn哪位知道怎么断开连接?
如何关闭socket
为什么在sever端收到sever程序<em>关闭</em>之后,假如client端没有<em>关闭</em>,需要等一段时间才能再次绑定<em>socket</em>那?要是在关掉sever程序之前先关掉client端,就可以立即再次绑定。rn已经让sever端退出时<em>关闭</em><em>socket</em>了啊,请问这是怎么回事??
关于如何取消socket完成端口的关联???
//当把一个<em>socket</em>关联到<em>完成</em><em>端口</em>,并调用WSARecv后:rnwhile(1)rnrn bRet = GetQueuedCompletionStatus(m_MainFrm->CompletionPort,rn &BytesTransferred,rn (PULONG_PTR) rn &PerHandleData,rn (LPOVERLAPPED*)rn &PerIoData,rn INFINITE);rn/*如果下边再多次调用WSARecv或WSASend的话。GetQueuedCompletionStatus就会被多次激活。我不希望这种事情的发生。所以当第一次激活后,我就想<em>关闭</em>该<em>socket</em>与<em>完成</em><em>端口</em>的关联。以便于下边进行我自己的一些交互操作。不知道如何取消该<em>socket</em>与<em>完成</em><em>端口</em>的关系呢。请高手指点一二。谢谢*/rnrn
完成端口,主动关闭客户端socket后,何时清空资源。
尝试的方案如下:rn方案一:rn1,有线程判断是否超时,当超时时直接删除资源。rn问题,有时在删除后,发出的recv回来了,这时就出现非常访问了。rn方案二:rn1,1,有线程判断是否超时,当超时时<em>关闭</em><em>socket</em>,(CloseSocket),等待<em>完成</em><em>端口</em>返回。rn问题,时而返回时而不返回。rn//////rn请问大家如何处理主动<em>关闭</em>这种情况呢。
完成端口怎样处理对方socket关闭事件
用<em>完成</em><em>端口</em>写个服务器程序,如果客户端的<em>socket</em><em>关闭</em>后,服务器端如何能够知道?好像IO Completion port 只能获得accept、read、write通知!
优雅关闭java console界面
对于发布后的jar或class,我们经常会写一些bat脚本来方便地使之运行,比如:[code=&quot;java&quot;]java -jar XXX.jar[/code]一旦双击这个bat脚本,会启动一个黑色的console界面,如果不需要这个,可以修改为:[code=&quot;java&quot;]@echo off start javaw -jar xxx.jar [/code] 某些时候,我们是需要这个console界...
Java程序优雅关闭的两种方法
使用java编写大型系统时,往往需要在程序被kill时将内存中的一些临时数据和状态处理掉,这里称之为<em>优雅</em><em>关闭</em>。介绍两种比较典型的方法。
spark streaming程序的优雅关闭
使用ssc.awaitTermination()来退出,程序只能在开始的终端处control + c来结束,不方便管理, 所以使用自定义方法来替换掉: stopByMarkFile(ssc,hadoop_file), 代码如下 def stopByMarkFile(ssc:StreamingContext, hadoop_file:String):Unit= { val intervalM...
怎么才能优雅关闭连接
看recv函数的返回值官方文档。提到了“<em>优雅</em>地<em>关闭</em>连接,就返回0“,但是我在客户端调close<em>socket</em>,server端还是得到-1啊rnrn[code=txt] If the connection has been gracefully closed, the return value is zero.[/code]rnrn
使用完成端口怎么样判断一个已经连接上的socket关闭
如果是客户端主动<em>关闭</em>,则rnGetQueuedCompletionStatus()返回1;BytesTransferred = 0;rn这是说客户端的<em>socket</em>没有进行数据交换rnrn当客户端的<em>socket</em>进行了数据交换rn则rnGetQueuedCompletionStatus()返回 0;但是BytesTransferred != 0;rn也不确定啊,反正我写的程序老在这出问题rn不知道究竟什么时候<em>socket</em>退出了rn请问怎么判断rnrn// First check to see if an error has occured on the <em>socket</em> and if sorn// then close the <em>socket</em> and cleanup the SOCKET_INFORMATION structurern// associated with the <em>socket</em>.rn这是windows网络编程的程序中,在检测BytesTransferred == 0 之前的注释rn其中的cleanup the SOCKET_INFORMATION structure什么rn该怎么样清楚这样的一个结构?rn
★关于完成端口关闭Socket的问题?在线等待
调用close<em>socket</em>()函数<em>关闭</em>Socket句柄,rn按照MSDN的说法,在该Socket上所有阻塞的操作都将取消。rn也就是说工作线程中对GetQueuedCompletionStatus的调用以失败将返回(如果该Socket上阻塞的操作),并且错误代码是WSA_OPERATION_ABORTED,但我在<em>关闭</em>Socket的时候,明明Socket上面有阻塞的操作,而GetQueuedCompletionStatus却总是返回成功?rn请问这是为什么?rn是不是我的理解有错误?rn
完成端口中,如果关闭一个SOCKET连接,不会产生程序崩溃
哪位帅哥对<em>完成</em><em>端口</em>模型熟悉些。有个问题请教一个:rnrn1、建立一个SOCKET连接通过CreateIoCompletionPort()关联上一个<em>完成</em><em>端口</em>。rn2、用WSARecv投递接收数据事件,并将股递的Overlapped结构(是new出来的)指针保存在一个链表中。。用WSAsend投递发送数据事件,并将股递的Overlapped结构保存在另一个链表中。。rnrn现在我要主动的<em>关闭</em>这个连接。这个地方需要怎么做?rn我碰到的问题是:在<em>关闭</em>这个连接。如果我直接就close<em>socket</em>的话。然后就将与这个连接相关的Overlapped缓冲区从两个链表中删除,但是这样的话,好像存在一个问题,假如这个两个股递的动作已经产生。内核正在接收数据,也就是说正在使用投递的BUF,而我却在这时产生了一个删除动作,那程序不是会崩掉,那我应该如果做才能解决这个问题呢?rn
java优雅关闭io流
教科书<em>关闭</em>的方法是每个都需要判断是否为空,每个都调用close。而且每个都需要在自己的try catch里面调用 如下图 InputStream is=null; InputStreamReader isr=null; BufferedReader read=null; try { is = new FileInputS...
一起学并发编程 - 优雅关闭
Java中原来在Thread中提供了stop()方法来终止线程,但这个方法是不安全的,所以一般不建议使用。文本将介绍两种可以<em>优雅</em>的终止线程的方式... &lt;!-- more --&gt; 第一种 在JAVA《Java多线程模式》中有一种叫Two-Phase Termination(两步终止)的模式可以<em>优雅</em>的终止线程,这种模式采用了两个...
Socket高手指点,如何真正关闭socket?
我的程序需要不停地轮流和多个服务器连接通信,其中就涉及多次<em>关闭</em>和打开套接字。我在读取数据后、读取数据超时(Timer控制)、连接超时(用Timer控制)、OnError和OnDisConnect中都添加了<em>关闭</em>套接字的动作。其中在OnError中是Socker->Close();其它是ClientSocket->Active = false ;但是程序运行一段时间后,ClientSocket->Active 就一直为true 为何?应该如何解决?有没有成功的应用原码参考参考啊?等ing!
用户端关闭socket时如何告知服务器关闭对应的socket
用户端随时都有可能<em>关闭</em>程序,我想着服务器在干自己的事的同时得时刻监听有没有某个<em>socket</em>需要被关掉...但是如何实现乜?用户和服务器直接要做的正经事就是传输信息啊什么的...如果是用户在<em>关闭</em>前发来某个信息的话...在那么多信息中怎么找到呢?rnrn另:有什么方法可以在程序里当某个条件成立时,自动<em>关闭</em>一个已经打开的JFrame么?
C# Socket 关闭服务,如何关闭当前已经连接的socket
RT。rnrn采用C#rnrn求解决方案rnrn目前server的<em>socket</em>主动close之后,listening没了。但是还有2个ES状态。rnrn说明服务器只是<em>关闭</em>了监听,但是客户端的连接没有主动close。rnrn
DELPHI完成端口SOCKET服务器演示程序
用DELPHI写的<em>完成</em><em>端口</em>演示例子程序,凑够20字。
请教一下Delphi下的SOCKET完成端口
下了一个别人写的<em>完成</em><em>端口</em>程序,只有服务器端。只是能接收客户端的数据,不能发送。rnrn 对里面的有些东西还是没有太搞明白。rnrn 那位搞过有完全的客户端,服务器端的例子。发一个学习一下。564373476@qq.com 如果有QQ可以交流的话更好。rnrn 我在西安,如果有西安的搞DELPHI的大家可以认识一下。rn
关于Windows Socket完成端口的问题
最近公司需要编制一个测试WINDOWS Socket 2.x API处理速度的服务器小程序,本人将《WINDOWS网络编程技术》一书中的第八章的服务器例子Chapter08\IOcmplt直接在BCB6.0中编译后,当客户端连接数小于58个时,服务器端不会出错,当大于58时提示两个错:rnWSARecv() failed with error 10053rnWSARecv() failed with error 10053rnTue Sep 26 00:50:06 2006rnrn当客户端连接大于200时提示:rnWSARecv() failed with error 10053rnWSARecv() failed with error 10053rnTue Sep 26 00:55:06 2006rnGetQueuedCompletionStatus failed with error 995rnrn希望高手指点迷津!!rnrn源码如下:rn#include rn#include rn#include rn#include rnrn#define PORT 5150rn#define DATA_BUFSIZE 8192rnrn#pragma comment(lib, "ws2_32.lib")rn#pragma hdrstoprnrn//---------------------------------------------------------------------------rnrn#pragma argsusedrntypedef structrnrn OVERLAPPED Overlapped;rn WSABUF DataBuf;rn CHAR Buffer[DATA_BUFSIZE];rn DWORD BytesSEND;rn DWORD BytesRECV;rn PER_IO_OPERATION_DATA, * LPPER_IO_OPERATION_DATA;rnrnrntypedef structrnrn SOCKET Socket;rn PER_HANDLE_DATA, * LPPER_HANDLE_DATA;rnrnrnDWORD WINAPI ServerWorkerThread(LPVOID CompletionPortID);rnrnchar str[80];rntime_t t;rnrnvoid main(void)rnrn SOCKADDR_IN InternetAddr;rn SOCKET Listen;rn SOCKET Accept;rn HANDLE CompletionPort;rn SYSTEM_INFO SystemInfo;rn LPPER_HANDLE_DATA PerHandleData;rn LPPER_IO_OPERATION_DATA PerIoData;rn int i;rn DWORD RecvBytes;rn DWORD Flags;rn DWORD ThreadID;rn WSADATA wsaData;rn DWORD Ret;rnrnrnrn printf("FD_SETSIZE is %d \n", FD_SETSIZE);rnrnrn if ((Ret = WSAStartup(0x0202, &wsaData)) != 0)rn rn printf("WSAStartup failed with error %d\n", Ret);rn return;rn rnrn // Setup an I/O completion port.rnrn if ((CompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0)) == NULL)rn rn printf( "CreateIoCompletionPort failed with error: %d\n", GetLastError());rn return;rn rnrn // Determine how many processors are on the system.rnrn GetSystemInfo(&SystemInfo);rnrn // Create worker threads based on the number of processors available on thern // system. Create two worker threads for each processor.rnrn for(i = 0; i < SystemInfo.dwNumberOfProcessors * 2; i++)rn rn HANDLE ThreadHandle;rnrn // Create a server worker thread and pass the completion port to the thread.rnrn if ((ThreadHandle = CreateThread(NULL, 0, ServerWorkerThread, CompletionPort,rn 0, &ThreadID)) == NULL)rn rn printf("CreateThread() failed with error %d\n", GetLastError());rn return;rn rnrn // Close the thread handlern CloseHandle(ThreadHandle);rn rnrn // Create a listening <em>socket</em>rnrn if ((Listen = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0,rn WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)rn rn printf("WSASocket() failed with error %d\n", WSAGetLastError());rn return;rn rnrn printf("WSASocket() 创建成功... \n");rn time(&t);rn strcpy(str, asctime(gmtime(&t)));rn printf("%s\n", str);rnrn InternetAddr.sin_family = AF_INET;rn InternetAddr.sin_addr.s_addr = htonl(INADDR_ANY);rn InternetAddr.sin_port = htons(PORT);rnrn if (bind(Listen, (PSOCKADDR) &InternetAddr, sizeof(InternetAddr)) == SOCKET_ERROR)rn rn printf("bind() failed with error %d\n", WSAGetLastError());rn return;rn rnrn printf("bind() 成功... \n");rnrn // Prepare <em>socket</em> for listeningrnrn if (listen(Listen, 500) == SOCKET_ERROR)rn rn printf("listen() failed with error %d\n", WSAGetLastError());rn return;rn rnrn printf("Agent服务器侦听中 ... \n");rnrn // Accept connections and assign to the completion port.rnrn while(TRUE)rn rn if ((Accept = WSAAccept(Listen, NULL, NULL, NULL, 0)) == SOCKET_ERROR)rn rn printf("WSAAccept() failed with error %d\n", WSAGetLastError());rn return;rn rnrn printf("有客户端连接到Agent服务器 ... \n");rnrn // Create a <em>socket</em> information structure to associate with the <em>socket</em>rn if ((PerHandleData = (LPPER_HANDLE_DATA) GlobalAlloc(GPTR,rn sizeof(PER_HANDLE_DATA))) == NULL)rn rn printf("GlobalAlloc() failed with error %d\n", GetLastError());rn return;rn rnrn // Associate the accepted <em>socket</em> with the original completion port.rnrn printf("Socket number %d connected\n", Accept);rn PerHandleData->Socket = Accept;rnrn if (CreateIoCompletionPort((HANDLE) Accept, CompletionPort, (DWORD) PerHandleData,rn 0) == NULL)rn rn printf("CreateIoCompletionPort failed with error %d\n", GetLastError());rn return;rn rnrn // Create per I/O <em>socket</em> information structure to associate with the rn // WSARecv call below.rnrn if ((PerIoData = (LPPER_IO_OPERATION_DATA) GlobalAlloc(GPTR, sizeof(PER_IO_OPERATION_DATA))) == NULL)rn rn printf("GlobalAlloc() failed with error %d\n", GetLastError());rn return;rn rnrn ZeroMemory(&(PerIoData->Overlapped), sizeof(OVERLAPPED));rn PerIoData->BytesSEND = 0;rn PerIoData->BytesRECV = 0;rn PerIoData->DataBuf.len = DATA_BUFSIZE;rn PerIoData->DataBuf.buf = PerIoData->Buffer;rnrn Flags = 0;rn if (WSARecv(Accept, &(PerIoData->DataBuf), 1, &RecvBytes, &Flags,rn &(PerIoData->Overlapped), NULL) == SOCKET_ERROR)rn rn if (WSAGetLastError() != ERROR_IO_PENDING)rn rn printf("WSARecv() failed with error %d\n", WSAGetLastError());rn return;rn rn rn rnrn
完成端口和异步Socket的区别是什么?
<em>完成</em><em>端口</em>和异步Socket的区别是什么?
创建完成端口并绑定socket
课程概述rn rnrn 这部教程是windows网络编程课程的第二部分课程:基于udp/ip协议的网络模型 rnrnrn 网络编程是互联基石,是程序猿基础必备技能,咱们这部UDP/IP课程为大家介绍有关于UDP/IP基本理论知识的分析,以及5个常用的网络模型,课程以代码实践为主,理论分析为辅,希望能帮助到大家。 rnrnrn课程特点:rn课程代码会带大家一行一行书写,保证大家都能够学会。rnrnrn rnrnrn rnrn
windows socket封装(完成端口,select)
基于第一个版本比较粗糙,目前对windows下实用的模式进行封装,以达到简单易用,并且完善了第一个版本中的处理不当问题,更为完善。下载分值也更低
socket高难问题之完成端口1
关于网络程序设计-delphirnrn我的服务器使用的<em>完成</em><em>端口</em>-工作线程两个,客户端<em>socket</em>2连接,rnrn当一个客户端发消息频率高的时候,部分消息丢失,rnrn如;客户端循环100次发消息,服务器端一般能接到第1,2,63,条,其他的都丢失rnrn敬请教我,不盛感激1
请教关于SOCKET和完成端口的问题
我先说下我的目的rnrn我在程序中有两个对话框rn对话框1用<em>socket</em>连接并监听<em>端口</em>3030rn对话框2用<em>socket</em>连接并监听<em>端口</em>3031rnrn服务器接受消息。。rnrn有一点我很不明白,服务器返回给客户端的消息,SOCKET能判断是不是自己<em>端口</em>的消息吗rn还有,服务器是怎么向这个<em>端口</em>发消息的。
完成端口socket传输文件的问题。
在网上下载了关于<em>完成</em><em>端口</em>的代码(nonocast的winsockclass和demo),编译后,我用vb做了个客户端测试。不知道为什么服务端总是只能收到一部分数据。
IOCP完成端口 socket 案例程序
IOCP<em>完成</em><em>端口</em> <em>socket</em> 案例程序
完成端口IOCP Socket DELPHI控件
<em>完成</em><em>端口</em>IOCP Socket DELPHI控件
完成端口 关闭 线程 在线等待
在使用<em>完成</em><em>端口</em>时,创建了多个工作者线程,如何<em>关闭</em>所有的线程?现在的问题是<em>关闭</em>所有的线程。如何向每个工作者线程发送<em>完成</em>数据包。rnrnrnrn/////////////////////////////////////////rn用PostQueuedCompletionStatus函数,向每个工作者线程都发送—个特殊的<em>完成</em>数据包。该函数会指示每个线程都“立即结束并退出”. rnrnrnrn下面是PostQueuedCompletionStatus函数的定义: rnrnBOOL PostQueuedCompletionStatus(rnrn HANDLE CompletlonPort,rnrn DW0RD dwNumberOfBytesTrlansferred,rnrn DWORD dwCompletlonKey,rnrnLPOVERLAPPED lpoverlapped,rnrn);rnrn现在的rnrn
IO完成端口正确关闭连接?
我服务端是IO<em>完成</em><em>端口</em>模型的 rn当我想<em>关闭</em>一个客户端的连接时怎么正确<em>关闭</em>掉啊? 我在结束的时候还要释放掉扩展的WSAOVERLAPPED结构!rn
如何检测socket关闭
程序如下:rnTClientSocket *<em>socket</em> = new TClientSocket(NULL);rn<em>socket</em>->ClientType = ctBlocking;rn在一个线程的Execute里:rnwhile (!Terminated && <em>socket</em>->Active)rnrn nCount = <em>socket</em>->Read(buf, num);rn ......................rnrnrn<em>socket</em>->Active这个条件永远是true,即使server已<em>关闭</em>,那该如何检测?rn我加了句Application->ProcessMessages()也不行促使Active=false
如何判断socket是否关闭
初学网络编程,想做一个多用户聊天软件。不清楚如何判断客户已经断掉了,服务器端是当有一个连接断开以后出发一个事件么?如何判断SOCKET已经断开呀!rnrn有那位高手作过给个思路!另外有简单多用户聊天的代码可以发一份给我么?rnMAIL:mzwhj1@163.com
如何关闭一个Socket连接?
写一个C/S,在server端rnServerSocket1.Socket.Connections[0].SocketHandlern这样是不是可以得到一个Socket连接的唯一标记,rn如果是,如何通过这个标记<em>关闭</em>这个Socket连接
WSADuplicateSocket 复制的socket如何关闭?
WSADuplicateSocket 复制的<em>socket</em>如何<em>关闭</em>rn我使用close<em>socket</em>() <em>关闭</em>不了
如何判断socket已经关闭
重复使用close<em>socket</em>()同一个<em>socket</em>是否会出错?如何判断一个<em>socket</em>已经<em>关闭</em>了或者是close<em>socket</em>过了?rn
如何正确关闭一个socket
public void StopSocket(Action stopSocketCallBack)    {        isSocketRunning = false;        if (clientSocket != null)        { clientSocket.LingerState = new LingerOption (false, 5); clientSocke
如何正确关闭一个Socket
public void StopSocket(Action stopSocketCallBack)     {         isSocketRunning = false;         if (clientSocket != null)         { clientSocket.LingerState = new LingerOption (false, 5);
如何检测socket端口关闭
我用<em>socket</em>建立了网络连接。服务端需要检测客户端状态,如果客户端已经<em>关闭</em>了服务方要进行<em>端口</em><em>关闭</em>.rn 1.客户端程序退出了如何检测。rn 2.客户端主机忽然<em>关闭</em>了如何检测。
如何立即关闭socket连接?
网络连接的时候,外面电话打不进来。。。rnrn为了解决这个问题,我想在请求一次数据之后马上把<em>socket</em>连接(INETMGR_OpenSocket创建的)<em>关闭</em>。但是,试了几个方法(INETMGR_Release,ISOCKET_Shutdown,ISOCKET_Cancel,ISOCKET_Close)都不行。rnrn不知道各位还有什么办法啊?
急:如何关闭socket?
while(1)rn rn rs = accept(<em>socket</em>, ....);rn rn if ( pthread_create(....) )rn rn ......rn rn问:在上面程序中,如何退出循环呢?
如何关闭socket的listen and connect?
现在发现一个问题就是:rn服务器在监听到客户端 或 客户端连接到服务器 之后,如果<em>关闭</em>了程序,就会报bug,我试着在析构函数中去<em>关闭</em><em>socket</em>,但是还是不行啊,我应该如何解决这个问题啊 ?
关于如何关闭socket连接
CloseSocket.Shutdown(SocketShutdown.Both)rn CloseSocket.Close()rn CloseSocket.Dispose()rn CloseSocket = Nothingrn1、这几个怎么排序rn2、CloseSocket.Close()和CloseSocket.Dispose()是不是一样的,不一样的话有哪些本质的区别rn3、CloseSocket = Nothing是不是<em>关闭</em>的时候必要的。。不用会有哪些坏处
如何关闭socket 100分
启动按钮代码rnserverThread = new Thread(new ThreadStart(StartListen));rnserverThread.Start();rnrn #region 开始监听<em>端口</em>rnpublic void StartListen()rnrn if(ListenSoc==null)rn rn int nPort = Convert.ToInt32(port_textbox.Text);rn IPEndPoint ipLocalEndPoint;rn IPAddress ipAddress = IPAddress.Parse(serverIP.Text);rn ipLocalEndPoint = new IPEndPoint(ipAddress, nPort); rn tryrn rn ListenSoc = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp );rn ListenSoc.Bind(ipLocalEndPoint);rn ListenSoc.Listen(10);rn if(!LisStop) ListenSoc.BeginAccept(new AsyncCallback(AcceptCallback),null);rn rn catch(Exception err) rn rn this.Close();rn return;rn rn rn rn我想断开所有连接到我的机子的机子,可是用shutdown和close不管用,怎么样断开呢
关闭Socket
当客户与服务器的通信结束,应该及时<em>关闭</em>Socket,以释放Socket占用的包括<em>端口</em>在内的各种资源。Socket.close() 方法负责<em>关闭</em>Socket。Socket<em>关闭</em>后就不能再对它进行IO操作,否则会抛出异常。 确保<em>关闭</em>Socket的操作总是被执行,需要将close方法置于finally代码块中。 同时Socket提供了三个接口以判断Socket是否被<em>关闭</em>,在连接,与本地<em>端口</em>绑定
关闭socket
if (<em>socket</em>_-&amp;gt;is_open()) { try { boost::system::error_code ignored_ec; <em>socket</em>_-&amp;gt;shutdown(boost::asio::ip::udp::<em>socket</em>::shutdown_both, ignored_ec); <em>socket</em>_-&amp;gt;cancel(); <em>socket</em>_-&amp;...
socket关闭
用python在写一个东西,用<em>socket</em>监听一个<em>端口</em>,但是重启的时候总是会报错 [ERROR] Address already in use 检查了一下<em>端口</em> netstat -an | grep 9200 tcp4 0 0 127.0.0.1.9200 127.0.0.1.60481 TIME_WAIT <em>socket</em> close
输出流关闭造成的Socket关闭
原文:https://blog.csdn.net/u012525096/article/details/76924627 发送数据(out.write)后,调用out.close(),当接收数据a=in.read(data)时,报错。 错误代码:<em>socket</em> recvfrom failed: EBADF (Bad file descriptor) 首先尝试:将out.close()移动至代码块最后...
golang 处理信号,对程序优雅关闭
利用信号拦截,<em>优雅</em>退出 func main(){ go func() { ch := make(chan os.Signal) signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGQUIT) log.Println(&lt;-ch) // do thi...
清华计算机组成原理课件下载
清华计算机组成原理课件 ppt,pps格式 相关下载链接:[url=//download.csdn.net/download/bobeerat/2998846?utm_source=bbsseo]//download.csdn.net/download/bobeerat/2998846?utm_source=bbsseo[/url]
web帮助文档下载
参考手册涵盖了网站技术的方方面面。 其中包括W3C的标准技术:HTML、XHTML、CSS、XML 。以及其他的技术,诸如JavaScript、PHP、ASP、SQL等等的帮助文档。 相关下载链接:[url=//download.csdn.net/download/missing311/3703040?utm_source=bbsseo]//download.csdn.net/download/missing311/3703040?utm_source=bbsseo[/url]
oracle 服务启动下载
很好的资料,执行即可启动服务。方便笔记本等资源少的机器运行 相关下载链接:[url=//download.csdn.net/download/u013096863/6687265?utm_source=bbsseo]//download.csdn.net/download/u013096863/6687265?utm_source=bbsseo[/url]
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview
我们是很有底线的