您的位置:首页 > 理论基础 > 计算机网络

一种关闭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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: