UDP模式下上位机能不能建立多个socket分别对不同的IP进行一对一的通信?

花生切糖 花生切糖 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在做一项测试,下位机是2块网络通信模块,都配置为UDP模式,分别配置成不同的IP和端口号,然后通过网线连接到路由器;现在上位机这边我创建了两个socket分别对相应的下位机进行一对一的通信,代码如下:

UINT16 i;

WORD socketVersion = MAKEWORD(2,2);
WSADATA wsaData;
SOCKET desSocket_0;
SOCKET desSocket_1;

struct sockaddr_in serverAddr[2];
int iAddrlen = sizeof(sockaddr_in);
char szbuffer[10] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
int ret;

if (WSAStartup(socketVersion,&wsaData) != 0)
{
printf("Winsock init faied!\r\n");
WSACleanup();
return;
}

/* 服务器监听的端口和地址 */
for(i = 0;i < 2;i ++)
{
memset(&serverAddr[i], 0, sizeof(serverAddr));
serverAddr[i].sin_family = AF_INET;
}
serverAddr[0].sin_port = htons(6000);
serverAddr[0].sin_addr.S_un.S_un_b.s_b1 = 192;
serverAddr[0].sin_addr.S_un.S_un_b.s_b2 = 168;
serverAddr[0].sin_addr.S_un.S_un_b.s_b3 = 1;
serverAddr[0].sin_addr.S_un.S_un_b.s_b4 = 120;
printf("Now connecting the server...\r\n");

desSocket_0 = socket(AF_INET, SOCK_DGRAM, 0);
if(desSocket_0 == INVALID_SOCKET)
{
printf("Socket0建立失败!\r\n");
printf("Error mseeage:%d\n",WSAGetLastError());
}

serverAddr[1].sin_port = htons(5000);
serverAddr[1].sin_addr.S_un.S_un_b.s_b1 = 192;
serverAddr[1].sin_addr.S_un.S_un_b.s_b2 = 168;
serverAddr[1].sin_addr.S_un.S_un_b.s_b3 = 1;
serverAddr[1].sin_addr.S_un.S_un_b.s_b4 = 130;
printf("Now connecting the server...\r\n");

desSocket_1 = socket(AF_INET, SOCK_DGRAM, 0);
if(desSocket_1 == INVALID_SOCKET)
{
printf("Socket1建立失败!\r\n");
printf("Error mseeage:%d\n",WSAGetLastError());
}

while(true)
{
ret = sendto(desSocket_0, szbuffer, sizeof(szbuffer), 0, (struct sockaddr*)&serverAddr[0], iAddrlen);
if(ret != SOCKET_ERROR)
{
Sleep(1000);
ret = recvfrom(desSocket_0, szbuffer, sizeof(szbuffer), 0, (struct sockaddr*)&serverAddr[0], &iAddrlen);
if(ret != SOCKET_ERROR)
{
printf("recive from server:%d\r\n", 0);
}
else
printf("Socket0ReciveError:%d\n",WSAGetLastError());
}
else
printf("Socket0SendError:%d\n",WSAGetLastError());

Sleep(1000);
ret = sendto(desSocket_1, szbuffer, sizeof(szbuffer), 0, (struct sockaddr*)&serverAddr[1], iAddrlen);
if(ret != SOCKET_ERROR)
{
Sleep(1000);
ret = recvfrom(desSocket_1, szbuffer, sizeof(szbuffer), 0, (struct sockaddr*)&serverAddr[1], &iAddrlen);
if(ret != SOCKET_ERROR)
{
printf("recive from server:%d\r\n", 1);
}
else
printf("Socket1ReciveError:%d\n",WSAGetLastError());
}
else
printf("Socket1SendError:%d\n",WSAGetLastError());

Sleep(1000);
}
closesocket(desSocket_0);
closesocket(desSocket_1);
printf("通讯失败!\r\n");
return;

结果无法通信。不能同时创建多个socket吗?
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
花生切糖
网络编程 18,356 成员 64,161 内容