社区
通信技术
帖子详情
如何检测socket端口的关闭
tsjhui
2001-07-02 02:14:35
我用socket建立了网络连接。服务端需要检测客户端状态,如果客户端已经关闭了服务方要进行端口关闭.
1.客户端程序退出了如何检测。
2.客户端主机忽然关闭了如何检测。
...全文
459
5
打赏
收藏
如何检测socket端口的关闭
我用socket建立了网络连接。服务端需要检测客户端状态,如果客户端已经关闭了服务方要进行端口关闭. 1.客户端程序退出了如何检测。 2.客户端主机忽然关闭了如何检测。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
davidking
2002-06-10
打赏
举报
回复
除非接管底层的驱动程序,否则对于一些异常情况是没法子的
tpProgramer
2001-08-25
打赏
举报
回复
如果不是异步模型呢? 有办法吗?
xlqin
2001-07-02
打赏
举报
回复
通过UDP联接就没办法了吧?
caiyi9000
2001-07-02
打赏
举报
回复
最简单的办法是:
服务器端软件用WSAAsyncSelect模型,然后在响应CLOSE事件的OnClose(SOCKET pSock)函数中做相应处理,其中pSock是当初OnAccept()里创建的用与此客户端通信的socket。
相关代码如下:
#define NETWORK_EVENT USER_MESSAGE+100 //定义网络事件
//自己定义消息映射函数,将上面定义的网络事件映射到处理函数
//OnNetEvent为网络事件处理函数,它在下面定义
ON_MESSAGE(NETWORK_EVENT, OnNetEvent);
//在你应用程序的初始化代码中调用下面的初始化网络的子函数
BOOL InitNetwork() //初始化网络
{
//初始化TCP协议
BOOL ret = WSAStartup(MAKEWORD(2,2), &wsaData);
if(ret != 0)
{
MessageBox("初始化套接字失败!");
return FALSE;
}
//创建服务器端套接字
SOCKET serverSocket
= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(serverSocket == INVALID_SOCKET)
{
MessageBox("创建套接字失败!");
closesocket(m_Socket);
WSACleanup();
return FALSE;
}
//绑定到本地一个端口上
sockaddr_in localaddr;
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(1688);
localaddr.sin_addr.s_addr = 0;
if(bind(serverSocket ,(const struct sockaddr*)&localaddr,
sizeof(sockaddr)) == SOCKET_ERROR)
{
MessageBox("绑定地址失败!");
closesocket(m_Socket);
WSACleanup();
return FALSE;
}
//注册网络异步事件,m_hWnd为应用程序的主对话框或主窗口的句柄
WSAAsyncSelect(serverSocket, m_hWnd, NETWORK_EVENT,
FD_ACCEPT | FD_CLOSE | FD_READ | FD_WRITE);
listen(serverSocket, 5); //设置侦听模式
return TRUE;
}
//定义网络事件的响应函数
void OnNetEvent(WPARAM wParam, LPARAM lParam)
{
//调用API函数,得到网络事件类型
int iEvent = WSAGETSELECTEVENT(lParam);
//得到发出此事件的客户端套接字
SOCKET pSock = (SOCKET)wParam;
switch(iEvent)
{
case FD_ACCEPT: //客户端连接请求
{
OnAccept();
break;
}
case FD_CLOSE: //客户端断开事件:
{
OnClose(pSock);
break;
}
case FD_READ: //网络数据包到达事件
{
OnReceive(pSock);
break;
}
case FD_WRITE: //发送网络数据事件
{
OnSend(pSock);
break;
}
default: break;
}
}
OnAccept()
{
SOCKET clientSock = accept(...);
}
OnClose(SOCKET pSock)
{
//做相应处理
}
davidking
2001-07-02
打赏
举报
回复
先检测SOCKET是否可读(可用select)
如可读然后读取数据如果读出的数据长度为0则表示已关闭
Socket
编程快速入门
本课程将理本课程将理啊 论结合实践,带你从零开始,系统学习
Socket
编程技术,让
Socket
的学习不再那么零散与难以掌握,同时会提炼出
Socket
网络传输的核心思想与构架,并带你踩坑出坑,增加你的分析与处理问题的啊aasa 能力,完善你的编程思想与知识体系。论结合实践,带你从零开始,系统学习
Socket
编程技术,让
Socket
的学习不再那么零散与难以掌握,同时会提炼出
Socket
网络传输的核心思想与构架,并带你踩坑出坑,增加你的分析与处理问题的能力,完善你的编程思想与知识体系。
如何
检测
socket
是否
关闭
,
socket
的
关闭
检测
及处理
socket
的
关闭
检测
及处理
检测
socket
关闭
reference SIGPIPE 信号处理整理 调用write, send, sendto等发送函数时,触发 SIGPIPE 信号,导致程序直接退出。 Program received signal SIGPIPE, Broken pipe. 0x00007ffff7af2224 in write () from /lib/x86_64-linux-gnu/libc.so.6 程序将 errno 设置为 EPIPE 之后,程序接受到内核发送过来的 SI
python
关闭
socket
端口
立即释放
server =
socket
.
socket
(
socket
.AF_INET,
socket
.SOCK_STREAM) server.setsockopt(
socket
.SOL_
SOCKET
,
socket
.SO_REUSEADDR, 1) 转载于:https://www.cnblogs.com/c-x-a/p/11153026.html
16.1
Socket
端口
扫描技术
端口
扫描是一种网络安全测试技术,该技术可用于确定对端主机中开放的服务,从而在渗透中实现信息搜集,其主要原理是通过发送一系列的网络请求来探测特定主机上开放的`TCP/IP`
端口
。具体来说,
端口
扫描程序将从指定的起始
端口
开始,向目标主机发送一条`TCP`或`UDP`消息(这取决于
端口
的协议类型)。如果目标主机正在监听该
端口
,则它将返回一个确认消息,这表明该
端口
是开放的。如果没有响应,则说明该
端口
是
关闭
的或被过滤。
socket
客户端
关闭
后,客户端
端口
还会被占用一段时间,然后才被操作系统释放
socket
客户端
关闭
后,
端口
还会被占用一段时间,然后才被操作系统释放
通信技术
4,356
社区成员
28,926
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章