windows下socket编程使用UDP协议绑定多个网卡

多个计算机使用UDP通信,如下图所示:
在这里插入图片描述
计算机B作为计算机A和计算机C的接收方,需要绑定多个IP地址,这时需要分别弄两个初始化函数initnetwork和initnetwork2.
主要代码实现为


BOOL m_NetOk;
BOOL netstart;
UINT RevThread(LPVOID pParam);
struct sockaddr_in sinself;
struct sockaddr_in sin3;
SOCKET srecv;

BOOL m_NetOk2;
BOOL netstart2;
UINT RevThread2(LPVOID pParam);
struct sockaddr_in sindata;
SOCKET srecv2;

int sendlen;
unsigned char  recvframe[30000];
unsigned char  recvframe2[30000];
unsigned int recvnum;
int tmp111 = 32768000;
int tmp222 = 32768000;

m_NetOk = InitNetwork();
netstart = m_NetOk;
RevT = AfxBeginThread(RevThread, this, THREAD_PRIORITY_HIGHEST, 0, 0, NULL);
	
m_NetOk2 = InitNetwork2();
netstart2 = m_NetOk;
RevT = AfxBeginThread(RevThread2, this, THREAD_PRIORITY_HIGHEST, 0, 0, NULL);	
	
BOOL CDisplayDlg::InitNetwork()
{
	int sock_reuse = 1;
	int tmp;
	wVersionRequested = MAKEWORD(1, 1);
	tmp = WSAStartup(wVersionRequested, &wsaData);
	if (tmp != 0)
	{
		AfxMessageBox(L"\r\nUnable to initialize WinSock for host info");
		return 0;
	}

	memset(&sinself, 0x0, sizeof(sinself));
	memset(&sin3, 0x0, sizeof(sin3));


	// Create the recv socket. This is the socket on which we'll
	// receive image data
	srecv = socket(AF_INET, SOCK_DGRAM, 0);
	if (srecv == INVALID_SOCKET)
	{
		AfxMessageBox(L"failed socket (%d)\n", WSAGetLastError());
		return 0;
	}
	sinself.sin_family = AF_INET;
	//	sinself.sin_addr.s_addr = INADDR_ANY;
	sinself.sin_addr.s_addr = inet_addr("192.168.1.11");		//本地 模拟综合管理机 
	sinself.sin_port = htons(5200);

	sin3.sin_family = AF_INET;
	sin3.sin_port = htons(5190);
	sin3.sin_addr.s_addr = inet_addr("192.168.1.22");			//图像处理板图像通道
	sendlen = sizeof(sin3);



	if (::bind(srecv, (sockaddr*)&sinself, sizeof(sinself)) == SOCKET_ERROR)
		AfxMessageBox(L"bind error!");

	setsockopt(srecv, SOL_SOCKET, SO_RCVBUF, (char *)&tmp111, sizeof(int));


	//  AfxMessageBox("Fully Connected!\n");

	return 1;
}

BOOL CDisplayDlg::InitNetwork2()
{
	int sock_reuse = 1;
	int tmp;
	wVersionRequested = MAKEWORD(1, 1);
	tmp = WSAStartup(wVersionRequested, &wsaData);
	if (tmp != 0)
	{
		AfxMessageBox(L"\r\nUnable to initialize WinSock for host info");
		return 0;
	}

	memset(&sinself2, 0x0, sizeof(sinself2));
	memset(&sindata, 0x0, sizeof(sindata));


	// Create the recv socket. This is the socket on which we'll
	// receive image data
	srecv = socket(AF_INET, SOCK_DGRAM, 0);
	if (srecv == INVALID_SOCKET)
	{
		AfxMessageBox(L"failed socket (%d)\n", WSAGetLastError());
		return 0;
	}

	sinself2.sin_family = AF_INET;
	//	sinself.sin_addr.s_addr = INADDR_ANY;
	sinself2.sin_addr.s_addr = inet_addr("192.100.1.11");		//本地 模拟综合管理机 
	sinself2.sin_port = htons(6000);

	sindata.sin_family = AF_INET;
	sindata.sin_port = htons(6500);
	sindata.sin_addr.s_addr = inet_addr("192.100.1.22");			//图像处理板图像通道
	sendlen = sizeof(sindata);



	if (::bind(srecv2, (sockaddr*)&sinself2, sizeof(sinself2)) == SOCKET_ERROR)
		AfxMessageBox(L"bind error!");

	setsockopt(srecv2, SOL_SOCKET, SO_RCVBUF, (char *)&tmp222, sizeof(int));


	//  AfxMessageBox("Fully Connected!\n");

	return 1;
}





UINT RevThread(LPVOID pParam)
{
	CDisplayDlg * p_dlg = (CDisplayDlg*)pParam; 
	int len, fromlen;
	fromlen = sizeof(sin3);
	unsigned short nowframe;
	while (1)
	{
		if (netstart)
		{
				len = recvfrom(srecv, (char *)&recvframe[0], 20520, 0, (sockaddr*)&sin3, &fromlen);
			}
		}
	}
}


UINT RevThread2(LPVOID pParam)
{
	CDisplayDlg * p_dlg = (CDisplayDlg*)pParam; 
	int len, fromlen;
	fromlen = sizeof(sindata);
	unsigned short nowframe;


	while (1)
	{
		if (netstart2)
		{
			{
				len = recvfrom(srecv2, (char *)&recvframe2[0], 20520, 0, (sockaddr*)&sindata, &fromlen);
			}
		}
	}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dx0014

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值