尊敬的 TI 支持人员:
我使用双板 CC3220来传输数据(LAN 网络)、
A 侧:向 B 侧发送数据并等待响应数据包:源端口 X -> dst 端口5004
B 侧:侦听端口5004并将响应数据包发送到端口 X 中的 A
我的问题:
B 侧侦听端口5004并从 A 侧接收数据包、然后在端口 X 中接收响应
A 侧不知道要侦听的端口 X。
如何将端口 X 固定在 A 侧?
我可以接收来自 A 侧任何端口的数据包吗?
非常感谢、
VU。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的 TI 支持人员:
我使用双板 CC3220来传输数据(LAN 网络)、
A 侧:向 B 侧发送数据并等待响应数据包:源端口 X -> dst 端口5004
B 侧:侦听端口5004并将响应数据包发送到端口 X 中的 A
我的问题:
B 侧侦听端口5004并从 A 侧接收数据包、然后在端口 X 中接收响应
A 侧不知道要侦听的端口 X。
如何将端口 X 固定在 A 侧?
我可以接收来自 A 侧任何端口的数据包吗?
非常感谢、
VU。
您好、Jan、
这是我的代码
ip_call = 0xc0a8010f; call_port = 5004; calling_to(ip_call, call_port, 1); // Send data in app_CB.gDataBuffer.nwData to ip at portnumber with quantity is numPack void calling_to(uint32_t ip, uint16_t portNumber, uint32_t numPack){ //unsigned short i; SendCmd_t SendCmdParams; SendCmdParams.nb = 1; SendCmdParams.portNumber = portNumber; SendCmdParams.ipv6 = 0; SendCmdParams.numberOfPackets = numPack; SendCmdParams.ipAddr.ipv4 = ip; app_CB.gDataBuffer.nwData[0] = 0x00; app_CB.gDataBuffer.nwData[1] = 0x01; app_CB.gDataBuffer.nwData[2] = 0x00; app_CB.gDataBuffer.nwData[3] = 0x00; app_CB.gDataBuffer.nwData[4] = 0x21; app_CB.gDataBuffer.nwData[5] = 0x12; app_CB.gDataBuffer.nwData[6] = 0xa4; app_CB.gDataBuffer.nwData[7] = 0x42; app_CB.gDataBuffer.nwData[8] = 0x6f; app_CB.gDataBuffer.nwData[9] = 0x70; app_CB.gDataBuffer.nwData[10] = 0x38; app_CB.gDataBuffer.nwData[11] = 0x67; app_CB.gDataBuffer.nwData[12] = 0x77; app_CB.gDataBuffer.nwData[13] = 0x77; app_CB.gDataBuffer.nwData[14] = 0x2f; app_CB.gDataBuffer.nwData[15] = 0x36; app_CB.gDataBuffer.nwData[16] = 0x53; app_CB.gDataBuffer.nwData[17] = 0x2b; app_CB.gDataBuffer.nwData[18] = 0x63; app_CB.gDataBuffer.nwData[19] = 0x68; UDPClient3(20, SendCmdParams.nb, SendCmdParams.portNumber,SendCmdParams.ipAddr, SendCmdParams.ipv6, SendCmdParams.numberOfPackets, TRUE); } // Send data UDP int32_t UDPClient3(int32_t buflen, uint8_t nb, uint16_t portNumber, ip_t ipAddress, uint8_t ipv6, uint32_t numberOfPackets, uint8_t tx) { int32_t sock; int32_t status; uint32_t i = 0; int32_t nonBlocking; //int32_t buflen; SlSockAddr_t *sa; int32_t addrSize; sockAddr_t sAddr; uint16_t nb_counter = 0; struct SlTimeval_t TimeVal; /* clear the global data buffer */ //memset(app_CB.gDataBuffer.nwData, 0x0, MAX_BUF_SIZE); //buflen = MAX_BUF_SIZE; sAddr.in4.sin_family = SL_AF_INET; sAddr.in4.sin_port = sl_Htons((unsigned short)portNumber); sAddr.in4.sin_addr.s_addr = sl_Htonl((unsigned int)ipAddress.ipv4); sa = (SlSockAddr_t*)&sAddr.in4; addrSize = sizeof(SlSockAddrIn_t); /* Get UDP sock descriptor - This call opens the socket. */ sock = sl_Socket(sa->sa_family,SL_SOCK_DGRAM, 0); status = sl_Bind(sock, sa, addrSize); #if 1 _u32 rate = 0xFF; // see wlan.h SlWlanRateIndex_e for values sl_SetSockOpt(sock, SL_SOL_PHY_OPT, SL_SO_PHY_RATE, &rate, sizeof(rate)); _u32 txpower = 0; // valid range is 1-15 sl_SetSockOpt(sock, SL_SOL_PHY_OPT, SL_SO_PHY_TX_POWER, &txpower, sizeof(txpower)); _u32 numframes = 1; sl_SetSockOpt(sock, SL_SOL_PHY_OPT, SL_SO_PHY_NUM_FRAMES_TO_TX, &numframes, sizeof(numframes)); #endif nonBlocking = TRUE; status = sl_SetSockOpt(sock, SL_SOL_SOCKET, SL_SO_NONBLOCKING, &nonBlocking, sizeof(nonBlocking)); if(status < 0) { sl_Close(sock); return(-1); } i = 0; while(i < numberOfPackets) { /* Send packets to server */ status = sl_SendTo(sock, &app_CB.gDataBuffer.nwData, buflen, 0, sa, (SlSocklen_t)addrSize); usleep(5); if((status == SL_ERROR_BSD_EAGAIN) && (TRUE == nb)) { usleep(10); continue; } else if(status < 0) { sl_Close(sock); return(-1); } i++; } status = sl_Close(sock); return(0); }
我尝试像您的示例一样进行设置,在 UDPClient 中,sento ()的参数是目的端口,而不是源端口。
发送 UDP 封包时、我无法固定源端口。
谢谢、
VU、
您好、Jan、
这是新代码
int32_t AddrSize; _i16 Sd; _i16 Status; SlSockAddrIn_t Addr; _i8 SendBuf[] = "Hello World !!!"; _i8 RecvBuf[1460]; Sd = sl_Socket(SL_AF_INET, SL_SOCK_DGRAM, 0); if( 0 > Sd ) { // error } nonBlocking = TRUE; Status = sl_SetSockOpt(Sd, SL_SOL_SOCKET, SL_SO_NONBLOCKING, &nonBlocking, sizeof(nonBlocking)); if(Status < 0) { sl_Close(Sd); return(-1); } Addr.sin_family = SL_AF_INET; Addr.sin_port = sl_Htons(5004); Addr.sin_addr.s_addr = SL_INADDR_ANY; Status = sl_Bind(Sd, ( SlSockAddr_t *)&Addr, sizeof(SlSockAddrIn_t)); if( Status ) { // error } Addr.sin_family = SL_AF_INET; Addr.sin_port = sl_Htons(5001); Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(192,168,1,15)); Status = sl_SendTo(Sd, SendBuf, strlen(SendBuf), 0, (SlSockAddr_t*)&Addr,sizeof(SlSockAddr_t)); if( strlen(SendBuf) != Status ) { // error } AddrSize = sizeof(SlSockAddrIn_t); Status = sl_RecvFrom(Sd, RecvBuf, 1460, 0, ( SlSockAddr_t *)&Addr, &AddrSize); if( 0 > Status ) { // error } Status = sl_Close(Sd); if( Status ) { // error }
当我绑定端口5004并发送->路由器分配源端口是随机的、
如果端口为't 5004、则源端口为固定端口。
我不知道路由器如何为 cc3220分配端口。
我将尝试使用另一个端口、
谢谢、
VU、
您好 Vu,
很抱歉、我不明白您要说什么。 最后一个注释。
但根据您上次的评论、您似乎希望在子网之间发送数据包。 对吧? 您应在您的第一个帖子中提供此信息。 如果中间人(路由器/NAT/防火墙)因路由原因而更改数据包内的端口、CC3220将无法执行此操作。 在之间路由 UDP 数据包总是有问题的、最好避免这些问题。 因为正确的功能取决于使用的网络硬件和正确的路由器/NAT/防火墙配置。 在这种用例中、TCP 问题更少。
但是,如果使用正确的路由器/NAT/防火墙设置,您应该能够通过“标准”UDP 客户端/服务器代码在子网之间正确发送数据包。
1月