UDP模式下上位机能不能建立多个socket分别对不同的IP进行一对一的通信?
我在做一项测试,下位机是2块网络通信模块,都配置为UDP模式,分别配置成不同的IP和端口号,然后通过网线连接到路由器;现在上位机这边我创建了两个socket分别对相应的下位机进行一对一的通信,代码如下:
结果无法通信。不能同时创建多个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吗?
...全文
相关推荐
C#的Socket实现UDP协议通信
其主要特点是无连接且不可靠的数据传输,这意味着UDP在发送数据时不会建立连接,也不会确认数据是否被接收方成功接收。
Qt 下的udp socket通信示例
记住,由于UDP是无连接的,所以没有建立连接和断开连接的概念,而是直接发送和接收数据报文。
JAVA TCP和UDP Socket通信框架
Java中的TCP和UDP Socket通信是网络编程的基础,用于在不同设备之间建立可靠的数据传输通道。
android socket UDP 通信
首先,我们来理解UDP协议的基本概念。UDP是一种无连接的、不可靠的传输层协议,它不像TCP那样需要建立连接、维护连接状态和顺序保证。
SOCKET之UDP跨网段广播返回服务端主机名和所有IP
"此资源是一个C++程序,用于实现UDP跨网段广播,目的是获取服务端的主机名和所有IP地址。程序中包含了必要的Winsock库,并定义了常量和服务端端口号。"在TCP/IP网络通信中,SOCKET


网络编程
