请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP432E411Y-BGAEVM 工具/软件:Code Composer Studio
我已经运行 UDP 服务器几个月了、没有任何问题。 现在、我需要在另一个端口上添加另一个端口、它会返回第二个服务器的绑定函数上的错误。 如果我一次只运行一台服务器、则效果不错、但同时不能运行。
我可以打开的 UDP 套接字数量是否有限制? 或者对我可以运行的 UDP 服务器有任何限制?
void * UDPFinder 任务(void * arg0)
{
内部 字节接收;
内部 字节 Sent;
内部 状态;
内部 服务器;
int n;
FD_SET readSet;
struct sockaddr_in localAddr;
struct sockaddr_in clientAddr;
socklen_t 地址;
特性 缓冲器[UDPPACKETSIZE];
uint16_t 端口号=*(uint16_t *) arg0;
uint32_t iptmp;
字符响应[64];
volatile tEEPROM_Data * pManufacturerInformation;
fdOpenSession (TaskSelf());
Display_printf (g_SMCDisplay、0、0、"UDP 服务器在端口(%d)上启动\n"、portNumber);
服务器=套接字(AF_iNet、SOCK_DGRAM、0);
if (server ==1){
Display_printf (g_SMCDisplay、0、0、"错误:未创建套接字。\n");
转到关断;
}
memset (localAddr、0、sizeof (localAddr));
localAddr.Sin_Family = AF_iNet;
localAddr.sin_addr.s_addr = htonl (INADDR_ANY);
localAddr.sin 端口= htons (portNumber);
status = bind (server、(struct sockaddr *)&localAddr、sizeof (localAddr));
如果(status =-1){
Display_printf (g_SMCDisplay、0、0、"错误:绑定失败。\n");
转到关断;
}
执行{
/*
* readSet 和 addrlen 是值结果参数、必须重置
*在每个 select()和 recvfrom ()调用之间
*
fd_zero (readSet);
fD_set (服务器、readSet);
addrlen = sizeof (clientAddr);
/*等待答复*/
Status = select (server + 1、readSet、NULL、NULL、NULL);
如果(状态> 0){
if (fd_isset (server、readSet)){
bytesRcvd = recvfrom (服务器、缓冲区、UDPPACKETSIZE、0、
(struct sockaddr *)&clientAddr、&addrlen);
Buffer[bytesRcvd]= 0;
如果(bytesRcvd >0){
IPTmp = ntohl (clientAddr.sin addr.s_addr);
Display_printf (g_SMCDisplay、0、0、"remoteIp:\t:%d.%d.%d:%d\n"、(uint8_t)(IPTmp>>24)&0xFF、
(uint8_t)(IPTmp>>16)&0xFF、
(uint8_t)(IPTmp>>8)&0xFF、
(uint8_t) IPTmp&0xFF、
clientAddr.sin 端口
);
// System_printf ("remoteIp:\t:%d.%d.%d.%d:%d\n"、(uint8_t)(IPTmp>>24)&0xFF、
// (uint8_t)(IPTmp>>16)&0xFF、
// (uint8_t)(IPTmp>>8)&0xFF、
// (uint8_t) IPTmp&0xFF、
// clientAddr.sin 端口);
// system_flush();
pManufacturerInformation = INFO_GET();
// n = sprintf (响应、"系统主控制器 ID:%06d"、pManufacturerInformation->unitSerialNumber);
#ifdef test_s固定 装置
N = sprintf (响应、"SMC 测试装置 ID:%06d"、pManufacturerInformation->unitSerialNumber);
#else
N = sprintf (响应、"系统主控制器 ID:%06d"、pManufacturerInformation->unitSerialNumber);
#endif
字节 Sent = sendto (server、response、n、0、(struct sockadr *)&clientAddr、 addrlen);
if (bytesSent!= n){
Display_printf (g_SMCDisplay、0、0、"错误:Sendto 失败。\n");
// System_printf ("错误:UDP sendto 失败。\n");
// system_flush();
}
}
}
while (status > 0);
shutdown:
if (server!=-1){
关闭(服务器);
}
fdCloseSession(TaskSele());
返回(NULL);
}
这是我的代码中具有的最大套接字数
/*套接字文件描述符表*/ #define MAXSOCKETS 10 uint32_t ti_NDK_socket_max_FD = MAXSOCKETS; void * ti_NDK_socket_fdtable[MAXSOCKETS];