现在的位置: 首页 > 综合 > 正文

vc查看端口是否被占用

2014年05月09日 ⁄ 综合 ⁄ 共 710字 ⁄ 字号 评论关闭

原理就是使用套接字的bind函数,如果bind返回的是WSAEADDRINUSE就是端口被占用。

效果图:

实现代码:

        UpdateData(TRUE);
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	wVersionRequested=MAKEWORD(1,1);
	err=WSAStartup(wVersionRequested,&wsaData);
	if(err!=0)
	{
		return;
	}
	if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
	{
		WSACleanup();
		return;
	}

	int iPort;
	CString strPort;
	m_cmdPort.GetWindowText(strPort);
	iPort=atoi(strPort);
	SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
	sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port = htons(iPort);
	addr.sin_addr.s_addr = htonl(INADDR_ANY);
	bind(s,(LPSOCKADDR)&addr,sizeof(addr));
	if(WSAGetLastError()==WSAEADDRINUSE)
	{
		m_used.SetWindowText("端口已被占用");
	}
	else
	{
		m_used.SetWindowText("");
	}
	UpdateData(FALSE);

记得要加上ws2_32.lib包含winsock就可以了。

抱歉!评论已关闭.