锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++平台框架库和混编开源 / bind10049经历和解决办法

服务方向

人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
量化预测
股票离线分析软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发

联系方式

固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

bind10049经历和解决办法


最近客户换机器运行业务平台,新机器上是多网卡多公网IP配置,每个网卡有一组监听连接和客户连接,自己发的连接(客户端)也需要绑定到具体的一个网卡上,中间遇到很多次10049问题。

最简单的制造问题办法就是指定个错误的ip来bind,则肯定遇到10049,有时候配置文件换到新机器上,配置信息里的ip和新机器不一样,不对应绑定就出这个10049问题。用ipconfig确认好地址就可以解决此类问题。

另外有些网卡虽然有地址,也不能绑定,比如无线网卡上强制bind,也会10049,我特意做了测试。

一般来说,客户端连接时指定网卡ip,能够通过,服务器端模式需要listen前的bind就经常出错。

C++写的bind代码示例如下:

	//获取Host的IP地址等信息
	ADDRINFOT aiHints;
	ZeroMemory(&aiHints, sizeof(ADDRINFOT));
	aiHints.ai_family = AF_INET;
	aiHints.ai_flags = AI_PASSIVE;
	aiHints.ai_protocol = 0;
	aiHints.ai_socktype = SOCK_STREAM;
	PADDRINFOT paiResult;
	GetAddrInfo(StringToWstring(cip).c_str(), NULL, &aiHints, &paiResult);

	sSocket = socket(AF_INET, SOCK_STREAM, 0);
	if (sSocket == SOCKET_ERROR)
	{
		//std::wcout << "Error socket" << std::endl;
		return _T("创建socket失败");
	}
	struct sockaddr_in sinSelf;
	memset(&sinSelf, 0, sizeof(sockaddr_in));
	sinSelf.sin_family = AF_INET;
	sinSelf.sin_port = htons(0);
	sinSelf.sin_addr.s_addr = inet_addr(pSelfip);
	if (-1 == ::bind(sSocket, (struct sockaddr*)&sinSelf, sizeof(sockaddr_in)))
	{
		closesocket(sSocket);
		return _T("客户端绑定自己IP失败");
	}

向s_addr赋值可以用inet_addr来替换掉,不影响功能。

用netstat -an可以确认是否已经绑定到具体的端口。

多网卡时,监听用bind可以用any地址,虽然是多网卡,但是每个网卡也不可能有一套端口,端口是操作系统层面管理的,任何一个网卡过来的数据,只要端口对,都可以发到具体的软件里。

友情链接
版权所有 Copyright(c)2004-2024 锐英源软件
统一社会信用代码:91410105098562502G 豫ICP备08007559号 最佳分辨率 1440*900
地址:郑州市金水区文化路97号郑州大学北区院内南门附近