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描述符不是套接字

 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC中,使用Socket进行网络编程时,可以使用`bind`函数将一个套接字与本地IP地址和端口在一起。`bind`函数用于服务器端,用来指服务器要监听的IP地址和端口号。 以下是`bind`函数的使用方法: ```cpp BOOL bind( const SOCKADDR* lpSockAddr, // 指向一个SOCKADDR结构体,包含要的IP地址和端口号信息 int nSockAddrLen // SOCKADDR结构体的长度 ); ``` 其中,`lpSockAddr`参数是一个指向`SOCKADDR`结构体的指针,该结构体包含了要的IP地址和端口号信息。可以使用`CSocket::Create()`函数创建一个套接字对象后,再通过`GetSockName()`函数获取本地IP地址和端口号,并将其填充到`SOCKADDR`结构体中。 以下是一个简单的示例代码,演示了如何在MFC中使用`bind`函数进行: ```cpp // 创建服务器套接字 CSocket serverSocket; serverSocket.Create(); // 获取本地IP地址和端口号 sockaddr_in serverAddress; int serverAddressLength = sizeof(serverAddress); serverSocket.GetSockName((sockaddr*)&serverAddress, &serverAddressLength); // 设置服务器地址和端口号 serverAddress.sin_port = htons(12345); // 设置要监听的端口号 // 套接字 if (serverSocket.Bind((sockaddr*)&serverAddress, sizeof(serverAddress)) == FALSE) { // 失败处理... } // 监听连接请求 serverSocket.Listen(); ``` 请注意,上述代码只是一个简单示例,实际使用时可能需要进行错误处理和更全面的逻辑。同时,还需要注意在之前,确保套接字已经被创建成功,并且设置了正确的地址族(AF_INET或者AF_INET6)和套接字类型(SOCK_STREAM或者SOCK_DGRAM)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值