一种关闭TCP连接的方法
2012-08-03 09:46
288 查看
利用IpHlpApi.h中SetTcpEntry函数可以修改单条TCP连接的信息,我们可以将TCP连接状态设为已删除就可以达到关闭TCP连接的效果。
/*
@param szIpAddr 远程连接ip地址
@param nPort 远程连接的端口号
*/
void CloseTcpConnection(LPCSTR szIpAddr,int nPort)
{
PMIB_TCPTABLE pTcpTable = NULL;
DWORD dwSize = 0;
if (GetTcpTable(pTcpTable,&dwSize,TRUE) == ERROR_INSUFFICIENT_BUFFER)
{
//pTcpTable = (PMIB_TCPTABLE)new BYTE[dwSize];
pTcpTable = (PMIB_TCPTABLE)malloc(dwSize);
}
DWORD dwRet = GetTcpTable(pTcpTable,&dwSize,TRUE);
if (dwRet == NO_ERROR)
{
for (int i=0; i<pTcpTable->dwNumEntries; i++)
{
in_addr in;
in.s_addr = pTcpTable->table[i].dwLocalAddr;
cout<<inet_ntoa(in)<<":"<<htons(pTcpTable->table[i].dwLocalPort);
in.s_addr = pTcpTable->table[i].dwRemoteAddr;
cout<<" --- "<<inet_ntoa(in)<<":"<<htons(pTcpTable->table[i].dwRemotePort)<<endl;
if (stricmp(inet_ntoa(in),szIpAddr) && (htons(pTcpTable->table[i].dwRemotePort) == nPort))
{
MIB_TCPROW mTcpRow = pTcpTable->table[i];
mTcpRow.dwState = MIB_TCP_STATE_DELETE_TCB;
SetTcpEntry(&mTcpRow);
}
}
}
if (pTcpTable != NULL)
free(pTcpTable);
}
/*
@param szIpAddr 远程连接ip地址
@param nPort 远程连接的端口号
*/
void CloseTcpConnection(LPCSTR szIpAddr,int nPort)
{
PMIB_TCPTABLE pTcpTable = NULL;
DWORD dwSize = 0;
if (GetTcpTable(pTcpTable,&dwSize,TRUE) == ERROR_INSUFFICIENT_BUFFER)
{
//pTcpTable = (PMIB_TCPTABLE)new BYTE[dwSize];
pTcpTable = (PMIB_TCPTABLE)malloc(dwSize);
}
DWORD dwRet = GetTcpTable(pTcpTable,&dwSize,TRUE);
if (dwRet == NO_ERROR)
{
for (int i=0; i<pTcpTable->dwNumEntries; i++)
{
in_addr in;
in.s_addr = pTcpTable->table[i].dwLocalAddr;
cout<<inet_ntoa(in)<<":"<<htons(pTcpTable->table[i].dwLocalPort);
in.s_addr = pTcpTable->table[i].dwRemoteAddr;
cout<<" --- "<<inet_ntoa(in)<<":"<<htons(pTcpTable->table[i].dwRemotePort)<<endl;
if (stricmp(inet_ntoa(in),szIpAddr) && (htons(pTcpTable->table[i].dwRemotePort) == nPort))
{
MIB_TCPROW mTcpRow = pTcpTable->table[i];
mTcpRow.dwState = MIB_TCP_STATE_DELETE_TCB;
SetTcpEntry(&mTcpRow);
}
}
}
if (pTcpTable != NULL)
free(pTcpTable);
}
相关文章推荐
- Linux检测TCP连接断开的一种简单实现方法
- Linux检测TCP连接断开的一种简单实现方法http://blog.csdn.net/wtewrw/article/details/6547380
- Linux检测TCP连接断开的一种简单实现方法
- 一种解决Android进行蓝牙连接时发生socket已关闭或超时错误的方法
- sqlserver2005默认情况下是禁用了tcp/ip连接。启动tcp/ip连接的方法,
- WinCE 6.0 模拟器与ActiveSync连接不成功的一种解决方法!
- TCP 协议连接与关闭的握手
- Linux 下TCP连接关闭情况分析
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- Microsoft Visual Studio 遇到了问题,需要关闭的一种可能的解决方法(转载)
- 优雅地关闭Socket;检测非正常断开的TCP连接
- C#编程UDP通信过程中出现【远程主机强迫关闭了一个现有的连接0x80004005】的解决方法
- SQL SERVER 2008不能连接本地服务器的一种解决方法
- Adb connection Error:远程主机强迫关闭了一个现有的连接 解决方法
- 关闭TCP连接
- 用tcpdump 分析如何建立与关闭tcp连接 - 邓维 - 博客园
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- VS与SQL Server连接时出现(provider: TCP Provider, error: 0)错误时的解决方法
- PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
- 远程主机关闭了连接错误,Flush()或End()方法导致的