MFC bind绑定10048错误

原文地址http://hi.baidu.com/yyvszh/item/dbc9f117b71eecf8756a845e

出现这种错误的意思是当前所用的端口已被占用,所以得更换端口号。

bool CChatDlg::InitSocket()
{
	m_socket=socket(AF_INET,SOCK_DGRAM,0);
	if(INVALID_SOCKET==m_socket)
	{
		MessageBox(_T("套接字创建失败!"));
		return FALSE;
	}
	SOCKADDR_IN addrSock;
	addrSock.sin_family=AF_INET;
	addrSock.sin_port=htons(6000);//端口号
	addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
	CString error;
	int errornum;

	int retval;
	retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
	if(SOCKET_ERROR==retval)
	{
		int temp;
		temp=WSAGetLastError();
		error.Format(_T("%d"),temp);
		AfxMessageBox(error);
		closesocket(m_socket);
		MessageBox(_T("绑定失败!"));
		return FALSE;
	}
	return TRUE;
}


上述代码端口号为6000,在我的电脑上会弹出10048错误,当我把端口号改成8080,问题就解决了。

我们也可以在代码中加入判断,把端口号声明为整形变量port,如下代码所示:

while((errornum=WSAGetLastError())==10048)
{
	port++;
	addrSock.sin_port=htons(port);
	retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
}


附上用WSAGetLastError()获得的socket编程中常见错误(摘自MSDN)

常数值描述sckOutOfMemory7内存不足

sckInvalidPropertyValue380属性值无效。

sckGetNotSupported394属性不可读。

sckSetNotSupported383属性是只读的。

sckBadState40006所请求的事务或请求本身的错误协议或者错误连接状态。

sckInvalidArg40014传递给函数的参数格式不确定,或者不在指定范围内。

sckSuccess40017成功。

sckUnsupported40018不受支持的变量类型。

sckInvalidOp40020在当前状态下的无效操作

sckOutOfRange40021参数越界。

sckWrongProtocol40026所请求的事务或请求本身的错误协议

sckOpCanceled1004取消操作。

sckInvalidArgument10014所请求的地址是广播地址,但未设置标记。

sckWouldBlock10035套接字不成块,而指定操作将使之成块。

sckInProgress10036制造块的 Winsock 操作在进行之中。

sckAlreadyComplete10037完成操作。未进行制造块的操作。

sckMsgTooBig10040数据报太大,不适于缓冲区的要求,因而被截断。
sckPortNotSupported10043不支持指定的端口。
sckAddressInUse10048地址在使用中。
sckAddressNotAvailable10049来自本地机器的不可用地址。
sckNetworkSubsystemFailed10050网络子系统失败。
sckNetworkUnreachable10051此时不能从主机到达网络。
sckNetReset10052在设置 SO_KEEPALIVE 时连接超时。
sckConnectAborted11053由于超时或者其它失败而中止连接。
sckConnectionReset10054通过远端重新设置连接。
sckNoBufferSpace10055没有可用的缓冲空间。
sckAlreadyConnected10056已连接套接字。
sckNotConnected10057未连接套接字。
sckSocketShutdown10058已关闭套接字。
sckTimedout10060已关闭套接字。
sckConnectionRefused10061强行拒绝连接。
sckNotInitialized10093应首先调用 WinsockInit。
sckHostNotFound11001授权应答:未找到主机。
sckHostNotFoundTryAgain11002非授权应答:未找到主机。
sckNonRecoverableError11003不可恢复的错误。
sckNoDatasckNotSocket10038描述符不是套接字

 

你可能感兴趣的:(编程,制造,socket,网络,mfc)